Bonjour,
Ca fait plusieurs heures que je m'arrache les cheveux sur ces lignes de codes :
Mes variables src et arr sont cohérentes mais si j'ai par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 nvarc.nomArc = malloc(sizeof(char)*(strlen(src.nomSommet)+strlen(arr.nomSommet)+4)); strcpy(nvarc.nomArc,src.nomSommet); strcat(nvarc.nomArc, " -> "); strcat(nvarc.nomArc,arr.nomSommet); printf("nvarc : %s\n",nvarc.nomArc);
src.nomSommet ="test"
arr.nomSommet = "blabla"
je vais me retrouver avec un résultat égal à " -> blablatest" alors que je devrais avoir "test -> blabla". Si je remplace " -> " par "\t->\t" , je vais avoir quelques caractères de la première chaine puis "->" puis la seconde chaine. Il y a donc un écrasement.
Et lors d'un affichage préalable de src et arr, je trouve des chaines tout à fait cohérentes.
A quoi cela peut il être dû ? J'ai pensé à un \0 présent en début de chaine sur src.nomSommet qui ferait planter le strcat mais je suppose que dans ce cas là, un printf("%s", src.nomSommet) ne fonctionnerait pas... Hors tout roule.
Remplacer le strcpy par nvarc.nomSommet = src.nomSommet me crée la même erreur.
Remplacer les valeurs de src.nomSommet par une valeur en dur fonctionne (strcpy(nvarc.nomSommet , "test")).
Le nom d'un sommet est créé par cette fonction
qui prend en paramètre une chaine d'un fichier traité avec la fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 struct Sommet nouveauSommet(char *s) { struct Sommet res; res.nomSommet= malloc(sizeof(char)*strlen(s)+1); strcpy(res.nomSommet,s); return res; }
pour enlever le retour ligne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 void clearChaine(char* s) { char *pch = strrchr(s, '\n'); if (pch) { *pch = '\0'; } }
Je ne pense pas pouvoir donner plus de détails pertinents que ça.
Merci d'avoir lu jusque là
Partager