Récupérer une sous chaine de caractère
Bonjour,
Voilà, je voudrais avoir vos avis sur la fonction que j'ai écrite. Elle permet de ressortir un bout de chaine compris entre 2 "#". Je débute en C donc je voudrais savoir quelle chose éviter, etc...
Merci :)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| char *get_label(char * cmd)
{
char *label;
char c = cmd[0];
int pos_1 = 0;
int pos_2 = 0;
int i = 0;
int cpt = 0;
int len = strlen(cmd);
/* il existe au moins un # dans la cmd */
if (strstr(cmd, "#") != NULL)
{
/*printf("parcours de la chaine : %s de taille : %d\n", cmd, len);*/
/* parcours de la chaine cmd */
while (i < len)
{
/* si le caractère courant est un # est que c'est le 1er */
if (c == '#' && cpt == 0)
{
pos_1 = i;
cpt++;
} else if (c == '#' && cpt == 1) /* un 2eme # est trouvé */
{
pos_2 = i;
cpt++;
}
c = cmd[i];
i++;
}
/* récupération de la chaine contenu entre les 2 positions */
label = (char *)realloc(label, pos_2-pos_1-3);
if (label != NULL)
{
cpt = 0;
for (i = pos_1+1; i < pos_2-2; i++)
{
label[cpt] = cmd[i];
cpt++;
}
}
/* debug
printf("pos_1 : %d\n", pos_1);
printf("pos_2 : %d\n", pos_2);
printf("nb de # : %d\n", cpt);
printf("label :'%s'\n", label);
printf("-->fin de get_label\n");*/
}
return label;
} |