Probabilmente sono un po 'troppo scemo per cercare su google, ma ho sempre pensato che gli array di caratteri ricevessero solo null terminato da un'inizializzazione letterale (char x[]="asdf";
) e mi sono un po' sorpreso quando ho visto che questo non sembra essere il caso.Tutti gli array di caratteri sono automaticamente terminati con null?
int main()
{
char x[2];
printf("%d", x[2]);
return 0;
}
uscita: 0
Qualora non una matrice dichiarata come size = 2 * char effettivamente ottenere la dimensione di 2 caratteri? O sto facendo qualcosa di sbagliato qui? Voglio dire, non è raro usare un array di caratteri come un semplice array di caratteri e non come una stringa, o è?
Anch'io ci ho pensato, quindi ho provato a creare array con dimensioni diverse e l'array era sempre seguito da uno 0. (lo 0 mostrato nel mio esempio non era seguito da 0, ma un array con dimensioni 1 * char nella stessa posizione era) – user1329846
@ user1329846: Qualunque cosa sia memorizzata in memoria dopo che l'array termina è fino al compilatore, stai ricevendo 0 ma potresti anche ottenere qualsiasi altro numero come dice lo standard se provi a leggerlo posizione tutte le scommesse sono disattivate. Consentitemi di chiarire questo punto: anche se siete stati fortunati ad avere sempre 0 qui, il vostro codice attiva ancora il _undefined behavior_ e potrebbe fallire in qualsiasi momento. –
Grazie per non usare 'può succedere di tutto, anche il tuo computer potrebbe darsi fuoco '. No, non può. E tutti questi esempi grandiosi sono semplicemente stupidi. – jn1kk