Bonjour,

Pour mon application GTK, je fais appel à une fonction de concaténation en C dont le code est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
char *concat (int Nombre_Args, ...)
{
    //Liste -variable- de chaînes de caractères à traiter
    va_list Liste_A_Traiter;
    //Compteur d'arguments
    int Compteur_Args;
    //Taille de la chaîne résultat
    size_t Taille;
    //Chaîne résultat
    gchar *Resultat_Concatene;
 
    //Initialisation de la liste à traiter, avec "Nombre_Args" variables
    va_start(Liste_A_Traiter, Nombre_Args);
    for (Taille = Compteur_Args = 0; Compteur_Args < Nombre_Args;
            Compteur_Args++)
        //Ajoute "Taille" et longueur de l'argument "Chaine de caractères"
        //courant à "Taille"
        Taille += strlen(va_arg(Liste_A_Traiter, gchar *));
    //Fin de traitement de la liste
    va_end(Liste_A_Traiter);
 
    //Réservation d'un bloc de taille "Taille + 1" en char
    Resultat_Concatene = (gchar *) malloc(Taille + 1);
    //Si la réservation s'est bien passée
    if (NULL != Resultat_Concatene)
    {
        //Initialisation de la liste à traiter, avec "Nombre_Args" variables
        va_start(Liste_A_Traiter, Nombre_Args);
        //On copie "" dans la chaine "Résultat_Concatene"
        strcpy(Resultat_Concatene, "");
        //Pour "Compteur_Args" allant de 0 à "Nombre_Args", et + 1
        for (Compteur_Args = 0; Compteur_Args < Nombre_Args; Compteur_Args++)
            //"Resultat_Concatene" recevra la copie des
            //différents éléments de la liste à traiter
            strcat(Resultat_Concatene, va_arg(Liste_A_Traiter, gchar *));
        //Fin de traitement de la liste
        va_end(Liste_A_Traiter);
    }
    //Renvoi de la chaine concaténée
    return Resultat_Concatene;
}
Je l'appelais par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Nom_Complet = concat(2, Nom_Dossier, Nom_Fichier);
Et là, d'un coup, il me dit SegFault. Y'a quelque chose qui m'échappe. Pouvez-vous me donner des indices ?