Argument du main

g30 -  
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
...
}

4 réponses

toto
 
Bonjour

Bizarre autant qu'étrange... Et à quoi ressemble ta fonction maFonction ?
0
g30
 
nomDuProgramme 1234,1234

maFonction(char *arg)
{
char * file;
file = strtok(arg,","); // c'est la que ca coince
....
}
0
g30 > g30
 
resalut

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
0
toto
 
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.
0
g30
 
un grand merci à toi,
ca fonctionne comme je le voulais
0
stajem Messages postés 389 Statut Membre 79
 
Bonsoir,

Un ptit "résolu", stp
@+
0