Argument du main
g30
-
stajem Messages postés 389 Statut Membre -
stajem Messages postés 389 Statut Membre -
Bonjour,
j'ai une fonction à laquelle je passe un "char *" a partir des arguments que j'ai entré à l'execution
ca marche sans probleme
mais quand je rappelle la fonction en envoyant un "char *" créé juste avant et auquel j'ai assigné exactement la même chose ca ne marche pas
en gros:
a l'execution -> nomDuProgramme 1234
int main(int argc,char * argv[]){
....
maFonction(argv[1]); // ca marche
char * s="1234";
maFonction(s); // la ca plante quand j'utilise strtok ( qui marche très bien avant
...
}
j'ai une fonction à laquelle je passe un "char *" a partir des arguments que j'ai entré à l'execution
ca marche sans probleme
mais quand je rappelle la fonction en envoyant un "char *" créé juste avant et auquel j'ai assigné exactement la même chose ca ne marche pas
en gros:
a l'execution -> nomDuProgramme 1234
int main(int argc,char * argv[]){
....
maFonction(argv[1]); // ca marche
char * s="1234";
maFonction(s); // la ca plante quand j'utilise strtok ( qui marche très bien avant
...
}
A voir également:
- Argument du main
- Python est introuvable. exúcutez sans argument pour procúder ó l - Forum Python
- Python est introuvable. ExÚcutez sans argument pour procÚder ✓ - Forum Python
- La main de la titi popo - Forum Musique / Radio / Clip
- Prise en main a distance windows - Guide
- [PyCharm] Pas d'interpréteur python ✓ - Forum Python
4 réponses
Attention , ton argv[1] vaut "1234,1234", pas seulement "1234".
Si tu veux faire un appel comparable avec ton pointeur s, il faut faire :
char * s="1234,1234";
Mais je crois (pas sûr) que le problème vient de ce que la fonction strtok modifie la chaîne analysée en remplaçant les délimiteurs par de zéros. Or ta chaîne étant uen constante, le compilateur la place peut-être dans une zone dont la modification est interdire. Pour vérifier, essaye :
char * s="1234,1234";
char s1[20];
strcpy( s1,s);
maFonction(s1);
La zone pointée par s1, elle, devrait être modifiable.
Si tu veux faire un appel comparable avec ton pointeur s, il faut faire :
char * s="1234,1234";
Mais je crois (pas sûr) que le problème vient de ce que la fonction strtok modifie la chaîne analysée en remplaçant les délimiteurs par de zéros. Or ta chaîne étant uen constante, le compilateur la place peut-être dans une zone dont la modification est interdire. Pour vérifier, essaye :
char * s="1234,1234";
char s1[20];
strcpy( s1,s);
maFonction(s1);
La zone pointée par s1, elle, devrait être modifiable.
maFonction(char *arg)
{
char * file;
file = strtok(arg,","); // c'est la que ca coince
....
}
je dois en gros reccuperer plusieurs info qui sont séparé par une virgule
le truc c'est tout marche nickel quand ca vient des arguments passé à l'execution mais si je crée moi-meme le "char*" "strtok" fait tout planter