strcat efface le début de chaine
Bonjour,
Ca fait plusieurs heures que je m'arrache les cheveux sur ces lignes de codes :
Code:
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); |
Mes variables src et arr sont cohérentes mais si j'ai par exemple :
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
Code:
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;
} |
qui prend en paramètre une chaine d'un fichier traité avec la fonction :
Code:
1 2 3 4 5 6 7
| void clearChaine(char* s)
{
char *pch = strrchr(s, '\n');
if (pch) {
*pch = '\0';
}
} |
pour enlever le retour ligne.
Je ne pense pas pouvoir donner plus de détails pertinents que ça.
Merci d'avoir lu jusque là ;)