Incomprensione [Risolto]

Salve,
in giro su internet ed in particolare mentre cercavo la libreria necessaria per l'RTC sono incappato in questo:

DateTime now = RTC.now();
sprintf(buffer1, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
sprintf(buffer2, "%02d/%02d/%d", now.day(), now.month(), now.year());

Ciò che non riesco a capire è cosa indicano questi %02d, o meglio, immagino indichino le variabili ore, minuti e secondi per il primo buffer e giorni, mesi, anni per il secondo buffer, ma ciò che non mi è chiaro è il perchè sono scritti in tal modo.
Mi piacerebbe sapere, se possibile, il significato di ogni valore che vi è all'interno e quindi:
-Del '%';
-Dello '02';
-E della 'd';

Kraine.

Quello tra doppi apici è una frase compreso i simboli di formattazione tipici della printf()
http://www.cplusplus.com/reference/cstdio/printf/

Nello specifico %d è indicatore di dove stampare un numero intero, 02 indica la minima dimensione e lo 0 di fillare con 0 quando la cifra non basta (esempio 8-> 08)

Mooolto meglio è usare la snprintf() dove bisogna specificare come secondo parametro la dimensione di buffer1 e buffer2 per evitare di scrivere "oltre" lo spazio dei due vettori/array:

snprintf(buffer1, sizeof(buffer1), "%02d:%02d:%02d", now.hour(), now.minute(), now.second());

Grazie per la risposta, è stata davvero esauriente.
Volevo chiederti: perchè è necessario, nel caso in cui utilizzo il comando printf, o snprintf, l'aggiunta di sizeof()?

Inoltre qual'è la differenza tra i tre? perchè snprintf è migliore?

Grazie mille per l'attenzione

printf() non esiste in Arduino perchè non esiste un monitor o console su cui stampare del testo

sprintf() stampa dentro a un array di caratteri, ma la snprintf è migliore (secondo me) perchè richiede di sapere quanto è grande questo spazio. Il C e C++ NON verifica se tu da codice vai "fuori" dalla dimensione di un array.
La sizeof() restituisce la dimensione in byte di una variabile/array.

Quindi occhio che:

char Str[10];
int Arr[10];

sizeof(Str) -> 10 dimensione in byte corrisponde a numero elementi perchè un char occupa 1 byte
sizeof(Arr) -> 20 se un int occupa 2 byte (dipende dal sistema, su Arduino 2 byte, su Win potrebbe essere 4 byte)
per avere numero giusto di elementi: sizeof(Arr)/sizeof(int) -> 10 elementi

Grazie mille