Falsche Frage.
Die richtige Frage wäre: "Welchen Datentyp müßte ich verwenden?"
1N4007:
oder bin ich völlig auf dem Holzweg?
Ja.
Der Platzhalter "%s" im Formatierungsstring ist schon richtig, aber der dient zur Formatierung von nullterminierten C-Strings und NICHT zur Formatierung von String-Objekten.
String-Objekte sind kompatibel zu String-Objekten.
C-Strings sind kompatibel zur AVR libc library, zu der beispielsweise die sprintf-Funktion gehört.
Dieses Array kannst du dann wie du es hast in sprintf() mit %s ansprechen
Und wozu soll das sein:
String timestamp = "";
Unsinn. Wenn du den String außerhalb brauchst, dann definiere char clockString[24] innerhalb der Funktion als "static". Dann behält das den Speicher auch wenn du die Funktion verlässt. Du kannst dann die Funktion einen Pointer auf das Array zurückgeben lassen:
Da musst du dir darüber im Klaren sein, dass du keine Zeiger auf lokale nicht-static Variablen zurückgeben kannst. Die andere Möglichkeit (und was die ganzen C Funktionen machen) ist den Puffer außerhalb zu definieren und einen Zeiger auf den Puffer als Parameter zu übergeben. So wie sprintf selbst einen Zeiger auf dein leeres String Array möchte.
Auch daran denken, dass clockString mindestens Platz für den String + 1 haben muss. Da gibt es auch snprintf() das da ein klein wenig sicherer ist, da die Puffer Größer übergeben wird: http://www.cplusplus.com/reference/cstdio/snprintf/
Hat aber auch den Nachteil, dass der String dann glaube ich nicht korrekt terminiert ist wenn das Ende des Puffers vorzeitig erreicht wird. Aber immerhin schreibt er nicht drüber.