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 :

En C, comment ajoutez-vous tous les arguments de ligne de commande ?


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Developer
    Inscrit en
    janvier 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Developer
    Secteur : Enseignement

    Informations forums :
    Inscription : janvier 2023
    Messages : 9
    Points : 8
    Points
    8
    Par défaut En C, comment ajoutez-vous tous les arguments de ligne de commande ?
    J'ai une mission. Le programme consiste à imprimer la somme de tous les arguments de ligne de commande en C comme je l'ai lu dans cet article. J'ai essayé ce code, il compile mais génère une erreur après avoir passé des arguments dans la console. Ci-dessous le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /* Printing sum of all command line arguments */
    #include <stdio.h>
     
    int main(int argc, char *argv[]) {
        int sum = 0, counter;
     
        for (counter = 1; counter <= argc; counter++) {
           sum = atoi(sum) + atoi(argv[counter]);
        }
        printf("Sum of %d command line arguments is: %d\n", argc, sum);
    }
    Après la compilation, il génère une erreur de segmentation (core dumped). Votre expérience peut résoudre mon problème.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    juillet 2013
    Messages
    4 457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : juillet 2013
    Messages : 4 457
    Points : 10 098
    Points
    10 098
    Par défaut
    Réfléchis 1 peu (<- je n'ai pas compilé, je peux me tromper )

    La fonction atoi est obsolète : dans la documentation de atoi, il conseille d'utiliser strtol (<- 2 liens cplusplus.com en anglais)

    ligne 8: /* ... */ atoi(sum) /* ... */ donc la variable sum est 1 "C-string beginning with the representation of an integral number", en gros 1 pointeur

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    11 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 11 633
    Points : 28 533
    Points
    28 533
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jesse100 Voir le message
    Votre expérience peut résoudre mon problème.
    Et ton cerveau? Il peut pas le résoudre???
    sum est déjà un nombre. Qu'est-ce que tu vas le passer par atoi()??? Ou alors tu n'as rien pigé à cette fonction...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2015
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : décembre 2015
    Messages : 1 508
    Points : 7 321
    Points
    7 321
    Par défaut
    Et en plus de l'erreur ligne 8 (passer au premier atoi() un paramètre qui n'est pas du tout une chaîne, d'ailleurs pourquoi ce atoi?);
    il y a aussi une erreur ligne 7, qui fait que l'on va trop loin, et ça va faire planter le second atoi() de la ligne 8.

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    juin 2009
    Messages
    4 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : juin 2009
    Messages : 4 460
    Points : 13 562
    Points
    13 562
    Billets dans le blog
    1
    Par défaut
    Lors de son analyse, le compilateur peut émettre des erreurs si le code est invalide, mais aussi des warnings si le code lui semble "bizarre". Il ne faut (presque) jamais ignoré les warnings en C. Il faut les comprendre et résoudre les problèmes qui les causent.

    Pour ton code, tu as du voir qq chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    prog.c: In function 'main':
    prog.c:9:19: warning: passing argument 1 of 'atoi' makes pointer from integer without a cast [-Wint-conversion]
        9 |        sum = atoi(sum) + atoi(argv[counter]);
          |                   ^~~
          |                   |
          |                   int
    In file included from prog.c:3:
    /usr/include/stdlib.h:104:30: note: expected 'const char *' but argument is of type 'int'
      104 | extern int atoi (const char *__nptr)
          |                  ~~~~~~~~~~~~^~~~~~
    Ici, on voit que tu passes int au lieu d'un const char*. La solution ici n'est bien sûr pas de caster pour créer un pointeur (comme pourrait le laisser croire le premier message), mais bien de passer un pointeur...... ou peut-être de revoir l'algorithme

Discussions similaires

  1. Réponses: 27
    Dernier message: 14/12/2006, 19h49
  2. Réponses: 2
    Dernier message: 14/09/2006, 14h24
  3. Réponses: 2
    Dernier message: 31/08/2006, 11h20
  4. Comment accéder à tous les caractères ?
    Par Girafe enrhumée dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 07/06/2006, 17h44
  5. Réponses: 2
    Dernier message: 06/06/2006, 08h32

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