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

Fermé
dragonban Messages postés 145 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 28 avril 2008 - 18 déc. 2003 à 23:37
 Dragonban - 19 déc. 2003 à 13:13
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

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 lundi 20 octobre 2003 Statut Membre Dernière intervention 28 avril 2008 14
19 déc. 2003 à 09:48
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 lundi 20 octobre 2003 Statut Membre Dernière intervention 28 avril 2008 14
19 déc. 2003 à 10:00
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 dimanche 11 février 2001 Statut Membre Dernière intervention 29 janvier 2006 208
19 déc. 2003 à 10:31
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
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
Toute fois c'est pas rentable sur de petite variable mais bien plus sur des chaines.
0
Merci Marden et Bob pour vos explications.

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