Bonsoir,
Le titre n'est peut être pas le plus "juste". Voici le problème que je dois régler.
Une fonction reçoit en paramètre une chaine de caractère dont le contenu doit être extrait suivant un format lui aussi fourni en paramètre. Le format est variable et dépend d'un traitement en amont.
Bien attendu le nombre de "sous chaines" à extraire est variable.
Je pensais utiliser la fonction sscanf(...), mais voila je ne sais pas combien de variables lui fournir (nombre non connu lors de la compilation). J'ai donc essayer en passant un tableau et en croisant les doigts, mais j'obtiens une erreur mémoire lors de l'exécution lorsque le format contient plus d'une valeur à extraire (ex:"%1c%4c%2c").
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 int ParseMsg(char *Msg, char *Format) { char Values [MAX-ITEM][SIZE]; ParamNbr = sscanf(Msg, Format, Values); .... }
Après recherche j'ai essayé d'utiliser la fonction vsscanf qui elle accepte une liste d'arguments, mais sans succès. Là j'obtiens une erreur lors de la compilation (mingw sous Windows).
L'erreur est: "error: 'va_start' used in function with fixed arg"
Pour info la fonction appelante lit le format dans un tableau. Le format n'est donc pas construit par le programme.
Et voila je me retrouve bloqué.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 int ParseMsg(char *Msg, char *Format ){ va_list PrmLsts; va_start(PrmLsts, Format); ParamNbr = vsscanf(Msg, Format, PrmLsts); va_end(PrmLsts); . . . }
Merci pour votre aide.
Bon week-end.
Partager