Bonjour,

Ca fait plusieurs heures que je m'arrache les cheveux sur ces lignes de codes :

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);
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 : 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;
}
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
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à