Problème avec strcpy
Fermé
Myrath92
Messages postés
7
Date d'inscription
samedi 1 février 2014
Statut
Membre
Dernière intervention
5 mai 2014
-
4 mai 2014 à 10:59
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 6 mai 2014 à 11:13
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 6 mai 2014 à 11:13
1 réponse
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
Modifié par fiddy le 4/05/2014 à 19:19
Modifié par fiddy le 4/05/2014 à 19:19
En fait, le strcpy() c'est la seule chose qui est juste ;-).
st->champ1=(char*) malloc(25*sizeof(char));
Pour info, pas besoin de cast en C.
st->champ1="rien";
Cela ne copie pas la chaîne rien dans la zone allouée par malloc(). Cela rattache juste st->champ1 à la zone dans la mémoire comprenant la chaîne "rien". Du coup, il y a fuite de mémoire.
Je pense que toi tu voulais faire : strcpy(st->champ1, "rien");
Et ça, c'est à faire pour st->champ2 également.
chtest=(char) fgetc(fich1);
if (chtest=='-')
Pourquoi ne pas déclarer chtest en int ? Ca serait mieux.
Ainsi cela donnerait : chtest=fgetc(fich1);
if (chtest=='-') /*pas de cast car '-' renvoie un int et non un char*/
strcat(s2->champ2,&chtest);
chtest est un char. Donc il ne se termine pas par un '\0'. Tu ne peux donc pas utiliser strcat...
Voilà. Corrige déjà tout ça, et reposte ton code entre deux balises "code c" s'il reste des erreurs ; ça sera plus lisible.
<"code c">Ici tu mets ton code<"/code"> (sans les guillemets)
Cdlt
Google is your friend
st->champ1=(char*) malloc(25*sizeof(char));
Pour info, pas besoin de cast en C.
st->champ1="rien";
Cela ne copie pas la chaîne rien dans la zone allouée par malloc(). Cela rattache juste st->champ1 à la zone dans la mémoire comprenant la chaîne "rien". Du coup, il y a fuite de mémoire.
Je pense que toi tu voulais faire : strcpy(st->champ1, "rien");
Et ça, c'est à faire pour st->champ2 également.
chtest=(char) fgetc(fich1);
if (chtest=='-')
Pourquoi ne pas déclarer chtest en int ? Ca serait mieux.
Ainsi cela donnerait : chtest=fgetc(fich1);
if (chtest=='-') /*pas de cast car '-' renvoie un int et non un char*/
strcat(s2->champ2,&chtest);
chtest est un char. Donc il ne se termine pas par un '\0'. Tu ne peux donc pas utiliser strcat...
Voilà. Corrige déjà tout ça, et reposte ton code entre deux balises "code c" s'il reste des erreurs ; ça sera plus lisible.
<"code c">Ici tu mets ton code<"/code"> (sans les guillemets)
Cdlt
Google is your friend
5 mai 2014 à 18:57
Modifié par Myrath92 le 5/05/2014 à 21:47
ça ne crash plus Merci beaucoup :D Par contre pour un fichier d'input où il n'y a que des lettres il n'arrive pas à sortir du estId, pour une raison qui m'est inconnue...Pour l'instant ;)
Encore merci.
6 mai 2014 à 11:13
strcpy(s->champ2,(char*) &ch);
ch n'est pas un char* mais un char... Ca va poser problème.
strcat(s4->champ2,(char*) &chtest);
chtest n'est pas un char*, ça va poser problème...
Remarque supplémentaire :
Tref = (char**) malloc(sizeof(char*)*5);
*Tref="integer";
Pourquoi faire un malloc ?
Tu pourrais faire simplement : char *Tref[]={"Integer", "real", "...",...};
Sinon, je remets (car je suis têtu :-)) :
st= malloc(sizeof(res));
st->champ1=(char*) malloc(10*sizeof(char));
Le (char*) est facultatif et même déconseillé. Si toutefois tu veux le garder, alors il faut le faire partout, y compris pour st=(...)malloc(...)
Cdlt,