Problème d'exécution d'un pg en c++

dragonban Messages postés 145 Date d'inscription   Statut Membre Dernière intervention   -  
 Dragonban -
Bonjour à tous,

Je viens de terminer un programme réalisé en C++ portant sur des calculs mathématiques assez simples avec gestion de menus.

Lors de la compilation, il n'y aucune erreur recensée.

Je lance la commande MS DOS et exécute l'exécutable. Les premiers menus s'affichent normalement. Je tape le choix au clavier qui va affecter une variable numérique entière (déclarée donc avec int).
Puis vient le moment où je dois taper au clavier l'unité de mesure qui va affecter une variable chaîne de caractères (déclarée avec char*nomdevariable). Dès la saisie de l'unité de mesure (ici : metre), windows m'informe que mon exé a généré des erreurs et l'exécution du programme est interrompue.

Pourriez-vous me dire pourquoi ?
(je peux vous envoyer copie de la source au besoin)

Dragonban,
le petit Dragon d'Internet

6 réponses

Bob
 
Char *pointer est un pointeur vers un caractère et non une chaine de caractères.
Char string[32] est une chaine de 32 + 1 caractères.
0
dragonban Messages postés 145 Date d'inscription   Statut Membre Dernière intervention   14
 
Bonjour Bob,

J'ai le livre "Programmer en langage C++" de Claude Delannoy (niveau débutant à expert) mais j'ai l'impression que le niveau débutant en c++ correspond déjà à un niveau au moins confirmé en langage C.

Je n'ai donc pas compris grand chose sur les pointeurs (leur utilité par rapport aux variables) et sur les références.

Dans le livre, il est écrit char*nomdevariable; pour déclarer une variable chaîne de caractères et char(void*)nomdevariable pour un pointeur. A moins que je n'ai vraiment rien compris au paragraphe.

Bon, je vais essayer sur ton conseil. Mais ça m'étonne que le compilateur n'ait pas déceler d'erreur dans le programme.

Dragonban,
le petit Dragon d'Internet
0
dragonban Messages postés 145 Date d'inscription   Statut Membre Dernière intervention   14
 
Bob,

Excuse-moi de revenir dessus mais j'aimerais comprendre quelque chose :

Lorsque je déclare
const char*phrase="choisissez en tapant le numero de la rubrique \n\n";
et que je l'exécute, il n'y a aucun problème (pourtant il n'y a pas de string malgré que la valeur affectée soit une phrase).

Mais là
char*unitebis; // Déclaration de la variable chaîne recevant la déclaration de l'unite de mesure lors d'une entrée au clavier
cela pose problème d'exécution dès l'entrée de la valeur au clavier.

Je ne comprends pas trop. Pourrais-tu m'expliquer un peu plus s'il te plaît ?

Dragonban,
le petit Dragon d'Internet
0
Marden Messages postés 1072 Date d'inscription   Statut Membre Dernière intervention   210
 
Dans le premier cas, le compilateur alloue un pointeur ET une zone (dont l'adresse n'est pas connue du programmeur) dans laquelle il range la chaîne de caractères, en y ajoutant un "\0".
Dans le second cas, seul le pointeur est alloué. C'est au programmeur à allouer, dynamiquement ou non, la zone ET à définir vers quoi (par une instruction d'affectation).
NB : la taille de la zone doit inclure le "null" de fin de chaîne.
0
Bob
 
Un pointeur contient une adresse d'une variable ce qui permet aisément de ne pas stocker plusieur fois la même variable en mémoire.

Exemple:

signed int x; // declaration d'un entier signe
x = 5; // on affecte 5
signed int *y; // declaration d'un pointeur d'entier signe
y = &x; // affectation de y par l'adresse de x avec &
printf("%i", *y); // ici on affiche la valeur pointe par y
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bob
 
Toute fois c'est pas rentable sur de petite variable mais bien plus sur des chaines.
0
Dragonban
 
Merci Marden et Bob pour vos explications.

Je viens de rectifier mon programme en ajoutant [15] à la variable unitebis et ça marche.
0