sprintf Invalid use of non-static error member function

I expanded the RTCLib 1307 example to include a sprintf call. On compile I get an "Invalid use of non-static error member function" in line - sprintf(dtString, prototype, dt.month, dt.day, dt.hour, dt.minute, dt.second);

Any suggestions? I'm stymied. I tried putting the call into both regular and static classes with the same result.
Thanks
Abbott

#include <Wire.h>
#include <RTClib.h>
RTC_DS1307 rtc;
void setup()
{
	while (!Serial); // for Leonardo/Micro/Zero

	Serial.begin(57600);
	if (!rtc.begin()) {
		Serial.println("Couldn't find RTC");
		while (1);
	}

	if (!rtc.isrunning()) {
		Serial.println("RTC is NOT running!");
		// following line sets the RTC to the date & time this sketch was compiled
		rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
		// This line sets the RTC with an explicit date & time, for example to set
		// January 21, 2014 at 3am you would call:
		// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
	}

}
void loop()
{
	DateTime dt = rtc.now();
	char* dtString;
	const char prototype[] = "%d/%d-%d:%d:%d";
	sprintf(dtString, prototype, dt.month, dt.day, dt.hour, dt.minute, dt.second);
	Serial.println(dtString);
}
char* dtString;
sprintf(dtString, prototype, dt.month, dt.day, dt.hour, dt.minute, dt.second);

You can't do that. You have to actually make (enough!) space for sprintf() to use, not a pointer to nothing. sprintf() does not care and will happily write into nothing (and probably write over other stuff you care about ;))

Next, month, day, etc are all methods (aka functions) of the object which return the value. Aka, you have to call them which you do with dt.month()