Bonjour,
A mon avis le comportement observé vient du fait que la variable secret à la malchance ... de se trouver juste avant la variable answer
.
Le problème vient d'un débordement de tampon sans doute dû à une mauvaise interprétation de l'écriture char <variable> [].
Quand l'on écrit ceci
1 2
| const char secret[] = "automobile";
char answer[] = ""; |
l'on déclare deux tableaux statiques, alloués sur la pile et dont la taille sera déduite à la compilation (à partir des chaînes). Le code est identique à
1 2
| const char secret[11] = "automobile"; // 10 caratères + zéro terminal
char answer[1] = ""; |
En revanche l'écriture
void initAnswer(const int size, char answer[])
est équivalente à
void initAnswer(const int size, char * answer)
Du coup l'on tente d'écrire 10 caractères dans un tableau de 1, qui déborde sur le tableau secret (écrasant les 9 premiers caractères) ; à noter que l'on rentre dans le cadre d'un comportement indéfini, qui pourrait aussi faire purement et simplement planter le programme.
Allouer un espace plus grand pour answer corrigerait le problème
1 2
| const char secret[11] = "automobile"; // 10 caratères + zéro terminal
char answer[11] = ""; |
mais pour un programme plus évolutif (avec secret pouvant être autre chose que "automobile"
), il vaudrait mieux utiliser des std::string gérant dynamiquement la mémoire et possédant beaucoup de fonctions très utiles.
Partager