2017-10-20 41 views
-4

J'ai une chaîne au format "B1, B3, B4, B6" et je voudrais assigner chaque nombre à une variable num1 = "1", num2 = "3", num3 = "4", et num4 = "6". Cette implémentation de sscanf est-elle valide?C - Séparer les cordes en utilisant d'autres délimiteurs?

char *num1; 
char *num2; 
char *num3; 
char *num4; 
sscanf(str, "B%s,B%s,B%s,B%s", num1, num2, num3, num4); 
+0

Pourquoi essayez-vous pas vous-même d'abord, et puis * * poser une question concernant les problèmes que vous pourriez rencontrer? – ilim

+0

quelle sortie vous avez après avoir exécuté le code ci-dessus? – LethalProgrammer

+0

Réponse courte: non. Et votre code est faux, car 'num1' etc. sont des pointeurs non-initiés. –

Répondre

0

Non, ce n'est pas vraiment un bon moyen. Si vous voulez juste les numéros un numéros, à savoir que int normales valeurs, puis utilisez l'opérateur de conversion "%d" au lieu et ont vos variables soient normales int variables, vous passez ensuite à sscanf en utilisant l'adresse de l'opérateur-&. Comme dans

int num1; 
int num2; 
int num3; 
int num4; 
sscanf(str, "B%d,B%d,B%d,B%d", &num1, &num2, &num3, &num4); 

Si vous d'autre part voulez les chiffres sous forme de chaînes, puis utilisez tableau au lieu des pointeurs:

char num1[2]; // Two characters is enough for a single-character string, plus terminator 
char num2[2]; 
char num3[2]; 
char num4[2]; 
sscanf(str, "B%1s,B%1s,B%1s,B%1s", num1, num2, num3, num4); 

Le format "%1s" dit sscanf en lecture seule un signle caractère.


En outre, vous devriez probablement vous assurer que le sscanf appel effectivement analysé l'entrée correctement. Cela peut être fait en vérifiant ce que sscanfretours:

if (sscanf(str, "B%d,B%d,B%d,B%d", &num1, &num2, &num3, &num4) == 4) 
{ 
    // All okay 
} 
else 
{ 
    // Something went wrong 
} 
+0

Je ne sais pas si l'OP le souhaite. Il peut vouloir ce 'char * num1 =" 1 "' au lieu de 'int num1 = 1'. Et le titre de la question me fait aussi croire qu'il veut des ficelles. –