probleme de decoupe d'une chaine
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
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
|
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;
} |
je l'utilise comme ceci:
Code:
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]);
} |
la chaine se decoupe bien sur de courte chaine mais lorsque je recois cette chaine par exemple:
Citation:
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
voici le resultat:
Citation:
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
elle n'est pas entierement découpé suivant les espaces, auriez vous une idée ?
bonne soirée à vous