strlen
restituisce il numero di caratteri che precedono il carattere null terminante. Un'implementazione di strlen
potrebbe assomigliare a questo:Strlen su una stringa con valori non inizializzati con comportamento non definito?
size_t strlen(const char * str)
{
const char *s;
for (s = str; *s; ++s) {}
return(s - str);
}
Questa particolare implementazione dereferenzia s
, dove s
possono contenere valori indeterminati. E 'equivalente a questo:
int a;
int* p = &a;
*p;
Così, per esempio, se si dovesse fare questo (che causa strlen
per dare un'uscita errata):
char buffer[10];
buffer[9] = '\0';
strlen(buffer);
E' un comportamento indefinito?
@ user2864740 sei sicuro che la stringa * deve * contenere un valore? Non è permesso a C di schiantarsi allegramente in una lettura prima di scrivere? – kay