IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

controle d arguments argv


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 75
    Points : 43
    Points
    43
    Par défaut controle d arguments argv
    Bonsoir,

    J ai realise un programme qui controle des parametres
    lorsque je fait cat -n ou cat -b c est ok
    par contre quand je fais cat tout seul j ai un segmentation fault
    quelqu un peut t il m' expliquer ou est le probleme voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    #include <stdio.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <string.h>
    #define LGMAX 81
     
    int coml_tab(char * x, char * y)
    {
      int i;
      for (i = 0;(i <= strlen(y));i++)
        {
          if(strncmp(x,y,3) != 0) return (1);
          ++x;
          ++y;
        }
      return (0);
    }
    int com_tab(char * x, char * y)
      {
      int i;
      for (i = 0;(i < strlen(x));i++)
        {
          if(strcmp(x,y) != 0) return (1);
      ++x;
      ++y;
        }
     return (0);
    }
    int main(int argc,char **argv)
    {
      char c[4][4]={'c','a','t','\0'};
      char d[3][4]={'c','a','t'};
        my_put_nbr(com_tab (c[0],argv[1]));
     
     
      if ((argc<=1) && (coml_tab (c[0],argv[1]) < 1))
               {printf("cat sans argument");}
        if ((argc<=3) && com_tab (c[0],argv[1]) < 1 && argv[2][0]=='-' && argv[2\
    ][1]=='n') {printf("cat -n sans argument");}
        if ((argc<=3) && com_tab (c[0],argv[1]) < 1 && argv[2][0]=='-' && argv[2\
    ][1]=='b') {printf("cat -b sans argument");}
    return(0);
    }

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Points : 538
    Points
    538
    Par défaut
    Dans ta fonction con_tab tu parcours une chaine vide (nommée y). Résultat tu sors du scope de ton tableau et segfault.

    Ensuite dans ton main tu déclare des tableaux à 2 dimensions composées de char. Des tableaux à une dimension suffiraient amplement.

    Ensuite tu manipule le argv avant même d'avoir vérifier si argc avait une valeur appropriée avec le nombre d'arguments attendu. Quand tu utilise argc/argv, prend l'habitude de faire un code de la sorte avant de manipuler les arguments de ton programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (argc > nombre_d_arguments_attendus) {
        blablabla...
    }
    Ensuite vérifie que ton compilateur soit bien réglé car quand j'ai essayé de compiler ton code, j'ai eu le droit à une demi page d'erreur dans la tronche.

    Voila, j'espere que ca a pu t'aider.

    ps : utilise des balises de codes, c'est plus facile à lire.
    "L'insanité consiste à répéter la même action dans l'espoir d'aboutir à un résultat différent" Albert Einstein
    ----------------------
    T.O.A.O 6-MarViN

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 75
    Points : 43
    Points
    43
    Par défaut re:
    Merci pour la reponse

    J' ai trouve la solution avec l aide de tes conseils en fait:
    pour car sans argument je l envoie vers une boucle infinie comme le cat systeme.
    desole pour le code je debute et je n' ai pas pense a compiler en W Wall pedanctic ansi
    mais c' est fait et ca m a aide a arranger le code ca n arrivera plus !!!

Discussions similaires

  1. ! Undefined control sequence. <argument>
    Par slaima15 dans le forum Erreurs - Avertissements
    Réponses: 6
    Dernier message: 10/06/2014, 15h08
  2. Réponses: 8
    Dernier message: 08/11/2012, 10h18
  3. Comment passer un groupe de control en argument d'une fonction
    Par medkarim dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 02/10/2008, 13h42
  4. Argument @ARGV en option
    Par stansoad0108 dans le forum Langage
    Réponses: 2
    Dernier message: 25/04/2008, 17h09
  5. premier pas - controle d'argument
    Par jeff_! dans le forum Général Python
    Réponses: 5
    Dernier message: 20/09/2006, 20h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo