Bonjour,
Pour mon application GTK, je fais appel à une fonction de concaténation en C dont le code est le suivant :
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 :
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 ?
Partager