J'ai un petit problème avec la fonction strtok.
Dans le K&R, il est dit que dans une définition de fonction, char s[] et
char *s sont équivalents. Lorsque je fais ceci :
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Al 1
Nicolas Favre-Félix a écrit:
Bonjour,
J'ai un petit problème avec la fonction strtok. Dans le K&R, il est dit que dans une définition de fonction, char s[] et char *s sont équivalents. Lorsque je fais ceci :
... dans une définition de fonction, pas de variable
char chaine[] = "Chaine:a decouper";
ici, tu crées un tableau de taille 18 et initialisé
char *chaine = "Chaine:a decouper";
ici chaine est un pointeur vers une chaine constante (et devrait être un const char *, d'ailleurs - le compilateur devrait indiquer un warning, mais bon j'en ai jamais vu)
le programme compile mais plante à l'éxécution.
strtok modifie son premier paramètre
dans le premier cas : chaine[] est modifiable dans le deuxième cas : chaine pointe sur une zone de mémoire non modifiable, ce qui provoque une erreur quand on essaie de modifier
si tu es sous unix: char *chaine = strdup ("Chaine:a decouper");
ne pas oublier de libérer en sortant
Nicolas Favre-Félix a écrit:
Bonjour,
J'ai un petit problème avec la fonction strtok.
Dans le K&R, il est dit que dans une définition de fonction, char s[] et
char *s sont équivalents. Lorsque je fais ceci :
... dans une définition de fonction, pas de variable
char chaine[] = "Chaine:a decouper";
ici, tu crées un tableau de taille 18 et initialisé
char *chaine = "Chaine:a decouper";
ici chaine est un pointeur vers une chaine constante
(et devrait être un const char *, d'ailleurs - le compilateur devrait
indiquer un warning, mais bon j'en ai jamais vu)
le programme compile mais plante à l'éxécution.
strtok modifie son premier paramètre
dans le premier cas : chaine[] est modifiable
dans le deuxième cas : chaine pointe sur une zone de mémoire non
modifiable, ce qui provoque une erreur quand on essaie de modifier
J'ai un petit problème avec la fonction strtok. Dans le K&R, il est dit que dans une définition de fonction, char s[] et char *s sont équivalents. Lorsque je fais ceci :
... dans une définition de fonction, pas de variable
char chaine[] = "Chaine:a decouper";
ici, tu crées un tableau de taille 18 et initialisé
char *chaine = "Chaine:a decouper";
ici chaine est un pointeur vers une chaine constante (et devrait être un const char *, d'ailleurs - le compilateur devrait indiquer un warning, mais bon j'en ai jamais vu)
le programme compile mais plante à l'éxécution.
strtok modifie son premier paramètre
dans le premier cas : chaine[] est modifiable dans le deuxième cas : chaine pointe sur une zone de mémoire non modifiable, ce qui provoque une erreur quand on essaie de modifier
Lorsque tu fais : char chaine[] = "Chaine:a decouper"; ton programme alloue de la place et y copie "Chaine:a decouper". L'appel a strtok() modifie la copie de cette chaîne et cela ne pose pas de problème.
Lorsque tu fais : char *chaine = "Chaine:a decouper"; ton programme fait pointer chaine vers un emplacement mémoire où il y a "Chaine:a decouper". Le problème vient du fait que l'appel à strtok() modifie la chaîne et que visiblement elle n'est pas stockée dans un endroit où elle peut être modifiée.
Lorsque tu appelles une fonction qui modifie un argument, vérifie que c'est possible.
Lorsque tu fais :
char chaine[] = "Chaine:a decouper";
ton programme alloue de la place et y copie "Chaine:a decouper".
L'appel a strtok() modifie la copie de cette chaîne et cela ne pose pas de
problème.
Lorsque tu fais :
char *chaine = "Chaine:a decouper";
ton programme fait pointer chaine vers un emplacement mémoire où il y a
"Chaine:a decouper". Le problème vient du fait que l'appel à strtok()
modifie la chaîne et que visiblement elle n'est pas stockée dans un endroit
où elle peut être modifiée.
Lorsque tu appelles une fonction qui modifie un argument, vérifie que c'est
possible.
Lorsque tu fais : char chaine[] = "Chaine:a decouper"; ton programme alloue de la place et y copie "Chaine:a decouper". L'appel a strtok() modifie la copie de cette chaîne et cela ne pose pas de problème.
Lorsque tu fais : char *chaine = "Chaine:a decouper"; ton programme fait pointer chaine vers un emplacement mémoire où il y a "Chaine:a decouper". Le problème vient du fait que l'appel à strtok() modifie la chaîne et que visiblement elle n'est pas stockée dans un endroit où elle peut être modifiée.
Lorsque tu appelles une fonction qui modifie un argument, vérifie que c'est possible.