Arf à force d'utiliser Eclipse, je fais plus attention aux imports ~~
Le code fonctionne mais je ne le comprend pas. Je suis allé cherché le code source du strdup.c http://www.diplom.org/~njudge/doxyge...8c-source.html
mais ça ne me fait pas plus comprendre.
Pourquoi d'un côté quand on fait char *variable = "toto"; on ne peut pas la passer à la méthode strtok, alors que si on utilise strdup ça fonctionne ?
strtok_r() modifie aussi le premier argument. strtok() est dépréciée non pas pour cette raison, mais parce qu'elle utilise une variable statique.
Comment on sait qu'une variable est statique ? je comprend pas la différence entre allouer un espace mémoire (malloc) et faire char *variable = "toto"; ? Quand on fait char *variable = "toto";, ça fait bien appele à malloc ?
J'ai trouvé ça :
http://nicolasj.developpez.com/articles/libc/string/
1 2 3
| char s1[11] = "Developpez";
char s2[] = "Developpez";
char *s3 = "Developpez"; |
La première méthode réserve une zone de 11 bytes et la chaîne "Developpez" y est stockée. La seconde méthode laisse le compilateur calculer la taille appropriée (11 bytes dans notre cas). La dernière méthode ne réserve pas de mémoire, elle se contente de stocker l'adresse d'une chaîne de caractères qui peut se trouver dans un endroit de la mémoire non modifiable par le programme, dans ce cas toute modification de la chaîne s3 se conclura par un comportement indéterminé. il est donc conseillé d'écrire :
1 2
|
const char *s3 = "Developpez"; |
mais je ne comprend pas bien, pourquoi toute modification de la chaine s3 se conclura par un comportement indéterminé. Comme ça se passe en mémoire quand on crée char *s3 ou const char *s3 ?
Partager