HELP je ne comprend pas pourquoi mon programme plante

surfeurnet Messages postés 68 Date d'inscription vendredi 28 février 2003 Statut Membre Dernière intervention 17 août 2005 - 3 mars 2003 à 18:41
crocejf2000 Messages postés 260 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 27 août 2008 - 4 mars 2003 à 08:14
j'ai developpper le programme suivant sous dev-cpp et lorsque je l'exécute il plante. Je pense que c'est un problème avec les constantes c ou adr mais je ne vois pas quoi.

#include <string.h>
#include <stdio.h>
#include "var_const.h"

char *c; char * adr;
const char * TabOp[4] = {"+", "-", "*", "/"}; // TabOp : tableau des opérateurs
const char * TabVar[3] = {"x", "y", "z"}; // TabVar : tableau des variables
int i;

int main()
{
c = NULL;
/* saisie de la chaine à simplifier */

printf("Saisir l'expression a simplifier : ");
scanf("%s", &c);

/* traitement de la chaine */
/* séparation des termes */

printf("separation de la chaine avec le delimitateur + : \n");
adr = strtok(c, "+");
while(adr)
{
printf("%s\n", adr);
adr = strtok(adr+strlen(adr)+1, "+"); //localisation
//des "+" suivants
}

return 0;
}

2 réponses

cs_C2S Messages postés 38 Date d'inscription vendredi 7 février 2003 Statut Membre Dernière intervention 20 mars 2005
3 mars 2003 à 20:07
Salut,

il suffit de remplacer la déclaration de c :
remplace char *c par char c[32] (par exemple la taille n'est pas importante car scanf rectifira la taille si nécéssaire)

puis vire le c = NULL (surtout!!)

voila, ca ca passe a la comile, mais je penses pas que c'est le resultat que tu attend... je me souvient plus trop de comment marche strtok, mais moi je lui passais 0 en premier paramètre lors du deuxième appel... a voir...

derniere chose, dans le scanf, le &c n'est pas forcement le bienvenue car c est un tableau de caractère (NTCTS) donc par définition : un pointeur. tu n'a pas besoin de le apsser par référence dans scanf pour qu'il soit modifié...

bon courage
------------
C2S
------------
0
crocejf2000 Messages postés 260 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 27 août 2008 1
4 mars 2003 à 08:14
Essaye aussi a la place de
adr = strtok(adr+strlen(adr)+1, "+"); //localisation
//des "+" suivants
juste :
adr = strtok(NULL, "+"); //localisation
//des "+" suivants
Hart
0
Rejoignez-nous