Argument du main

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
...
}
Configuration: Windows Vista
Firefox 3.0.5

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour

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

      maFonction(char *arg)
      {
      char * file;
      file = strtok(arg,","); // c'est la que ca coince
      ....
      }
    2. @g30resalut

      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
  2. 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.