#include "stdio.h"
#include "string.h"
main()
{
char string[] = "october"; // october is 7 letters
strcpy(string, "september"); // september is 9 letters
printf("the size of %s is %d and the length is %d\n\n", string, sizeof(string), strlen(string));
return 0;
}
uscita:Sizeof vs STRLEN
la dimensione di settembre è 8 e la lunghezza è di 9
C'è qualcosa di sbagliato con la mia sintassi o cosa?
Si sta scrivendo oltre la fine della stringa 'stringa'. Questo è un comportamento indefinito. 'string' può contenere solo 8 caratteri (7 per" ottobre "e 1 per il terminatore null). Quando chiami 'strcpy', stai scrivendo 10 caratteri (9 per" settembre "e 1 per il terminatore null), il che significa che sei passato oltre la fine dell'array e stai sovrascrivendo la memoria adiacente. – Marlon
Si noti che 'sizeof' è calcolato al momento * compile * dove' strlen' è il tempo di esecuzione. – Naveen
@Naveen: essere consapevoli del fatto che non è necessariamente vero dove sono coinvolti VLA. – caf