Bonjour à vous,
Cela m'agace. Je n'arrive pas à faire une fonction simple en C, pourtant mon langage de base au lycée. Bon. Cela fait deux ans que je fais du VB mais là, cela m’énerve.
Voila : je voudrais recréer une fonction identique au strtok mais sans ce dernier car mon logiciel est en multithread.
Je reçois une chaîne de caractères qui est en fait plusieurs chaînes séparées par 0x0D et 0x0A. Je dois donc les découper.
Ce que je cherche à faire, c'est donc récupérer la 1ère partie jusqu'au séparateur. Et me retourner en même temps le restant de la trame afin que je puisse de nouveau la passer à la moulinette pour le suivant, etc.
Voila ce que j'ai effectué pour le moment mais j'ai un défaut :
Je continue à chercher car j'ai besoin de cette fonction. Si je trouve avant une info, merci de me dire si vous voyez quelque chose à améliorer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 char* tokString (char* Linetok, char* sep) { int index = -1; char *new_s = NULL; char lineReturn[strlen(Linetok)]; //recherche de l'index du 1er séparateur if (Linetok != NULL && sep != NULL) { char *ptr_pos = NULL; ptr_pos = strstr (Linetok, sep); if (ptr_pos != NULL) { index = ptr_pos - Linetok; } } if (index > 0 ){ new_s = malloc (sizeof (*new_s) * (index + 2)); if (new_s != NULL) { int i; for (i = 0; i <= index; i++){ if (Linetok[i] != '\x0D'){ new_s[i] = Linetok[i]; }else{ new_s[i] = '\0'; } } for (i = 0; i >= strlen(Linetok) - index; i ++){ lineReturn[i] = Linetok[i + index]; } lineReturn[i] = '\0'; Linetok = strcpy(Linetok,lineReturn); return new_s; }else{ return NULL; } }else{ return NULL; } }
Merci.
Partager