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

4 réponses

  1. toto
     
    Bonjour

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

      maFonction(char *arg)
      {
      char * file;
      file = strtok(arg,","); // c'est la que ca coince
      ....
      }
      0
      1. 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
  2. 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
  3. g30
     
    un grand merci à toi,
    ca fonctionne comme je le voulais
    0
  4. stajem Messages postés 389 Statut Membre 79
     
    Bonsoir,

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