/ / sscanf et plusieurs% ms - c, scanf

sscanf et plusieurs% ms - c, scanf

Quand sscanf() obtient deux "% ms" dans la chaîne de format. Est-il prudent d'appeler free () pour les deux pointeurs cibles, lorsque le sscanf() renvoie 0 ou 1? Comme dans la fonction suivante:

void foo(const char* text)
{
char* key = NULL;
char* value = NULL;

int count = sscanf(text, "%ms %ms", &key, &value);

if (count == 2)
{
...
}

free(key);
free(value);
}

Ou peut le pointeur cible plus tard (value) ont une valeur de déchets? Et le nettoyage suivant est nécessaire:

void bar(const char* text)
{
char* key = NULL;
char* value = NULL;

int count = sscanf(text, "%ms %ms", &key, &value);

if (count == 2)
{
...
free(key);
free(value);
}
else if (count == 1)
{
free(key);
}
}

Réponses:

4 pour la réponse № 1

Tout d'abord, vous devez être conscient que m dans une spécification de conversion est non standard, vous devriez donc penser à l'utiliser deux fois: votre code ne sera pas portable.

Mais alors, si votre implémentation prend en charge m, cet usage est sûr aussi longtemps que vous initialisez vos pointeurs sur 0/NULL. scanf() ne touche jamais à rien quand il n'y a pas de conversion possible et free(0) est spécifié pour être un pas d'op (c'est toujours sûr).