Bug étrange avec le string et les tableaux statiques [Fermé]

Signaler
-
Messages postés
14727
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
29 septembre 2020
-
Bonjour,
J'ai le projet de crée un programme C++ capable de convertir les nombres écrit (par exemple : dix) en valeur numérique (ici c'est : 10). Sauf que j'ai un problème avec un string qui change de valeur sans que l'on lui ai demander.

J'ai réussis à extraire le bout de code qui bug dans ce programme (il est long mais facile à lire):

#include <iostream>

using namespace std;

int main()
{
    string mot;
    cout << "ecrit un mot" << endl; //j'écrit par exemple "coucou"
    getline(cin, mot);

    int const tailleListe = 17;

    string nombreListe [tailleListe];
    nombreListe[0] = "zero";
    nombreListe[1] = "un";
    nombreListe[2] = "deux";
    nombreListe[3] = "trois";
    nombreListe[4] = "quatre";
    nombreListe[5] = "cinq";
    nombreListe[6] = "six";
    nombreListe[7] = "sept";
    nombreListe[8] = "huit";
    nombreListe[9] = "neuf";
    nombreListe[10] = "dix";
    nombreListe[11] = "onze";
    nombreListe[12] = "douze";
    nombreListe[13] = "treize";
    nombreListe[14] = "quatorze";
    nombreListe[15] = "quinze";
    nombreListe[16] = "seize";
    nombreListe[17] = "vingt";

    cout<<mot<<endl; // et ce n'est plus "coucou" qui est enregistré mais "vingt" (le contenu de la dernière ligne du tableau statique)
    return 0;
}


Il s'agit de mon premier bug du genre.
Et je compile sous code::block

1 réponse

Messages postés
14727
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
29 septembre 2020
255
Un tableau de taille 17 va de 0 à 16 (17 cases) donc taper en case 17 t'offre un petit buffer overflow, c'est déjà pas mal, car tu peux aussi avoir un SEG FAULT.
Effectivement, j'ai fait une erreur d'inattention. Merci de ton aide
Messages postés
14727
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
29 septembre 2020
255
Si le problème est résolu, merci de marquer le sujet comme résolu.