2 votes

sscanf - Comment dois-je gérer cela ?

J'essaie d'analyser une chaîne ascii en utilisant sscanf. La chaîne ressemble à ceci :

"Param1","Param2","","Param4"

Le problème est qu'il pourrait y avoir un Param3 mais que ce n'est pas garanti. Je ne suis pas non plus intéressé par le Param3 mais je dois le prévoir au cas où il serait présent.

J'analyse les paramètres de la manière suivante :

char ParamStr[] = "\"Param1\",\"Param2\",\"\",\"Param4\"";
char Param1[10];
char Param2[10];
char Param4[10];

sscanf(ParamStr, "\"%[^\"]\", \"%[^\"]\", \"%*[^\"]\", \"%[^\"]\"", Param1, Param2, Param4);

Mais lorsque j'analyse le paramètre 3, j'obtiens des résultats incorrects pour le paramètre 4.

Quelle est la manière correcte de traiter un paramètre comme Param3 qui est "dynamique" ?

4voto

Johnny Mopp Points 6485

Vous pouvez utiliser la valeur de retour de scanf et utiliser deux chaînes de format différentes :

// Try to scan all 4....
int count = sscanf(ParamStr, "\"%[^\"]\",\"%[^\"]\",\"%[^\"]\",\"%[^\"]\"",
    Param1, Param2, Param3, Param4);
// Didn't get 4? Try for 3 using a different format string
if (4 != count) {
    count = sscanf(ParamStr, "\"%[^\"]\",\"%[^\"]\",\"\",\"%[^\"]\"", 
        Param1, Param2, Param4);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X