2009-09-09 14 views
6

Ho un problema divertente con questa funzione. Io lo uso come segue:sprintf_s problem

int nSeq = 1; 
char cBuf[8]; 
int j = sprintf_s(cBuf, sizeof(cBuf), "%08d", nSeq); 

E ogni volta che ottengo un'eccezione. L'eccezione è da buffer a small. Quando ho cambiato il secondo campo nella funzione a sizeof (cBuf) + 1.

perché ho bisogno di aggiungere uno se solo voglio copiare 8 byte e ho un array che contiene 8 byte?

risposta

10

Il buffer contiene 8 posizioni. La stringa contiene 8 caratteri e un carattere null per chiuderla.

+0

Quindi ho bisogno di aumentare la dimensione del buffer di 1? –

+1

Sì. 1 è esattamente la dimensione del terminatore null. Nel mio codice scrivo anche letteralmente "char cBuf [8 + 1]" per sottolineare il fatto che ho bisogno di posto per questo personaggio extra. – xtofl

+1

Ho usato 'char [sizeof (" 00000000 ")]'. – MSalters

1

Tutte le funzioni di sprintf aggiungono un valore null per terminare una stringa. Quindi la tua stringa ha una lunghezza di 9 caratteri. 8 byte di testo e lo zero finale

+0

Quindi ho bisogno di aumentare la dimensione del buffer di 1? –

2

La stringa richiede la terminazione di '\ 0' e 8 byte di dati (00000001) a causa di% 08d. Quindi devi dimensionare come 9.