strsep() utilisation et ses alternatives

#include <stdio.h>
#include <string.h>

int main() {

char *slogan = "together{kaliya} [namak]";
char *slow_gun = strdup(slogan);

char *token = strsep(&slow_gun, "{");

printf ("\n slow_gun: %s\n token: %s\n", slow_gun, token);

return 0;
}

quand je l'exécuter:

$ cc -o try try_strsep.c
$ ./try

 slow_gun: kaliya} [namak]
 token: together  

Mais quand, j'ai changer de char *slogan:

char *slogan = "kalia} [namak]";

et exécutent le même programme:

$ vi try_strsep.c 
$ cc -o try try_strsep.c
$ ./try

 slow_gun: (null)
 token: kalia} [namak]

Mon Question est, donc, lorsque j'utilise strsep() et de la chaîne d'entrée n'ont pas le modèle que je suis à la recherche d', le retour de strsep() est mal. La seule façon que je peux valider si strsep() n'a pas pu trouver le modèle est de vérifier if (slow_gun == NUll).

Si j'ai char *slogan = "together{" puis strsep avec succès revenir token mais renvoie slow_gun à vide (pas null)

$ cc -o try try_strsep.c
$ ./try

 slow_gun: 
 token: together

Est-il un moyen que je pouvais éviter ce CAS de vérifier et de s'appuyer sur la fonction pour retourner me le substr et si elle n'est pas là, de retour NULL?

Vous devez free la chaîne de caractères retournée par strdup
Vous m'avez eu en larmes. Je suis d'accord pour vous, mais est-ce que cela va m'aider avec ma question?
Aider quelqu'un à éviter les fuites de mémoire est toujours utile 🙂 Ma réponse ci-dessous devrait vous aider avec votre question.
Vous m'a fait penser à cette conférence goo.gl/ks0Oe 🙂

OriginalL'auteur hari | 2011-07-28