bonsoir à tous,
j'ai un probleme a vous soumettres, encore un me direz vous ...
en fait j'ai enfin trouvé une fonction split cependant j'ai quelques soucis avec
voici deja le code de cette fonction
je l'utilise comme ceci:
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 int split_buf(char *buf, char ***argv) { int argvsize = 8; int argc; char *s; *argv = calloc(sizeof(char *) * argvsize, 1); argc = 0; while (*buf) { if (argc == argvsize) { argvsize += 8; *argv = realloc(*argv, sizeof(char *) * argvsize); } if (*buf == ':') { (*argv)[argc++] = buf + 1; buf = ""; } else { s = strpbrk(buf, " "); if (s) { *s++ = 0; while (*s == ' ') s++; } else { s = buf + strlen(buf); } (*argv)[argc++] = buf; buf = s; } } return argc; }
la chaine se decoupe bien sur de courte chaine mais lorsque je recois cette chaine par exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 char **tab; unsigned int count, i; count = split_buf(buffer, &tab); for (i=0;i<count;++i) { printf("ARRAY[%d]: %s\n", i, tab[i]); }
voici le resultat:CAPAB CAPABILITIES :NICKMAX=32 CHANMAX=65 MAXMODES=20 IDENTMAX=12 MAXQUIT=256 MAXTOPIC=308 MAXKICK=256 MAXGECOS=129 MAXAWAY=201 IP6SUPPORT=1 PROTOCOL=1202 CHALLENGE=pgqZ{Om@keAOD``Tg~{^ HALFOP=0 PREFIX=(ov)@+ CHANMODES=abgq,k,Lfjl,CKMNOQRSTcimnprstz USERMODES=,,s,BHIRSWiorwx SVSPART=1
elle n'est pas entierement découpé suivant les espaces, auriez vous une idée ?ARRAY[0]: CAPAB
ARRAY[1]: CAPABILITIES
ARRAY[2]: NICKMAX=32 CHANMAX=65 MAXMODES=20 IDENTMAX=12 MAXQUIT=256 MAXTOPIC=308 MAXKICK=256 MAXGECOS=129 MAXAWAY=201 IP6SUPPORT=1 PROTOCOL=1202 CHALLENGE=pgqZ{Om@keAOD``Tg~{^ HALFOP=0 PREFIX=(ov)@+ CHANMODES=abgq,k,Lfjl,CKMNOQRSTcimnprstz USERMODES=,,s,BHIRSWiorwx SVSPART=1
bonne soirée à vous
Partager