C Language Dimenticando di allocare un byte in più per \ 0


Esempio

Quando copi una stringa in un buffer malloc ed, ricorda sempre di aggiungere 1 a strlen .

char *dest = malloc(strlen(src)); /* WRONG */
char *dest = malloc(strlen(src) + 1); /* RIGHT */

strcpy(dest, src);

Questo perché strlen non include il trailing \0 nella lunghezza. Se prendi l'approccio WRONG (come mostrato sopra), richiamando strcpy , il tuo programma invocherà un comportamento indefinito.

Si applica anche alle situazioni in cui stai leggendo una stringa di lunghezza massima nota da stdin o da qualche altra fonte. Per esempio

#define MAX_INPUT_LEN 42

char buffer[MAX_INPUT_LEN]; /* WRONG */
char buffer[MAX_INPUT_LEN + 1]; /* RIGHT */

scanf("%42s", buffer);  /* Ensure that the buffer is not overflowed */