peut etre que cette nuit les tableaux sont devenus des l-values qui sait [:spamafote]
LetoII
:pt1cable:
C pas au niveau de strtok que tu doit faire gaffe au dépassement, mais avant.
deviant
Ah, je crois que je viens de comprendre, il s'arrête au premier \0 de buf donc la oui il ne peut pas dépasser.
deviant
Non, j'ai dis quoi comme connerie.
Taz
c'est un troll?
deviant
C'est pas une question de coder proprement où pas (enfin si justment).
Prend cet exemple tout bête:
Code :
#include <stdio.h>
#include <string.h>
int
main (void)
{
char buf[2];
char *line, *buf_ptr;
buf_ptr = buf;
line = strdup("Voilaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ma chaine super longue\n" );
buf_ptr = strtok(line, " " );
printf("%s\n", buf);
free(line);
return 0;
}
Il va y avoir un beau dépassement et vu que dans mon programme je ne contrôle pas le contenu de line.
A moins bien sûr que buf est la même taille que line et la il n'y a pas de problèmes...
dernière fois avant sanction (ça va je suis crédible là?)
Arréte après tu va avoir mauvaise réputation [:ddr555]
Taz
man strtok
dernière fois avant sanction (ça va je suis crédible là?)
deviant
En fait, ce que je voudrais faire c'est avancer dans buf à chaques mots récupérés. Exemple si je fais
Code :
printf("%s\n", get_token(lbuf));
printf("%s\n", get_token(lbuf));
Il m'affiche:
Code :
Test
ca
LetoII
Et strtok t'as essayé?
xilebo
tu alloues de la memoire dans ta fonction get_token , et tu retournes ce pointeur.
Comme tu utilises cette fonction dans ton printf , tu perds l adresse de ton pointeur du coup tu ne peux pas le liberer.
Taz
avant meme de lire, man strtok.
edit: ben ç t'oblige à mémoriser le résultat, puis faire ton printf, puis faire un free
edit1: pour ton problème. et bien dans ta boucle while de recopie, pense aussi à t'arreter si tu trouves un '\0' dans src. manque un <stdio.h> et un const pour faire faire const char *src
deviant
J'ai à moitié honte car je n'arrive pas à trouver le bug la dedans:
Code :
#define _GNU_SOURCE
#include <string.h>
int
main (void)
{
char *buf;
buf = strdup("Test ca marche\n" );
printf("%s\n", get_token(buf, 256));
free(buf);
return 0;
}
char *
get_token (char *str, int max)
{
char *buf;
buf = malloc(max);
if(!buf)
return NULL;
while(!isblank(*str) && max--)
*buf++ = *str++;
*buf = '\0';
return buf;
}
D'ailleur, je fais un malloc sans free dans get_token, je le mets où le free ?