Qu’affiche le code suivant ?
char* states[] = { "PLOP", "PLIP", "BOUHHH", "CROTTE", "DINGDING", "CAFE", "UB40" "GWB", }; char * others_string[] = { "ROGER", "RABBIT", }; [...] printf("State %s\n", states[7]);
Je précise que je compile toujours en -Wall et que je n’avais aucun warning bien sûr !
[edit 6 décembre 2018]
Si c’est un compilateur GCC pour ARM sur APF6 (j’ai pas toutes les options en tête) la fonction printf affiche :
State ROGER
Par contre sur un pc (debian) sans aucune option spécifique :
State (null)
Et oui ça n’est pas vu comme un bug … puisque ça compile en -Wall et que ça s’exécute sans problème (enfin pour l’exécution il y a quand même une histoire de pointeur qui va trifouiller au mauvais endroit de la mémoire sur la version «embarquées»).
Tout simplement car deux chaînes de caractères côtes à côtes sont considérées comme une seule et même chaîne.
Ici « UB40 » et « GWB » ne sont pas deux chaînes de caractères distinctes mais une seule et même chaîne : « UB40GWB ». Il n’y a pas d’index numéro 7 et donc on déborde sur la suite … qui est également un tableau de pointeurs sur chaînes de caractères. Du coup ça ne le dérange pas de l’afficher.
cqfd
Il manque une virgule …
😉
En effet, mais ça compile quand même très bien ! Et ça s’exécute sans broncher, ça n’affiche juste pas la valeur attendue.
Le seul bug est entre le clavier et l’écran 😉