Ho letto questa domanda e la sua risposta in un libro. Ma non ho capito la giustificazione del libro.
int main()
{
char str[5] = "fast enough";
return 0;
}
E la risposta è stata:
Non sono riuscito a capirlo.
Qualcuno può spiegarlo per favore?
Risposte:
Nello standard C++, 8.5.2/2 Matrici di caratteri dice:
Nello standard C99, 6.7.8/2 Inizializzazione dice:
C90 6.5.7 Inizializzatori dice simile.
Tuttavia, nota che per C (sia C90 che C99) il carattere di terminazione '\0' verrà inserito nell'array se c'è spazio . Non è un errore se il terminatore non si adatta (C99 6.7.8/14:"Caratteri successivi della stringa di caratteri letterale (incluso il carattere nullo di terminazione se c'è spazio o se l'array è di dimensione sconosciuta) inizializzano gli elementi del Vettore").
D'altra parte, lo standard C++ ha un esempio che indica che un errore dovrebbe essere diagnosticato se non c'è spazio per il carattere di terminazione.
in entrambi i casi, questo dovrebbe essere diagnosticato come un errore in tutti i compilatori:
char str[5] = "fast enough";
Forse i compilatori pre-ANSI non erano così severi, ma qualsiasi compilatore ragionevolmente moderno dovrebbe diagnosticarlo.