Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1866 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Perte d'arguments dans la ligne de commande

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Perte d'arguments dans la ligne de commande

n°2049697
shaoyin
Posté le 17-01-2011 à 17:52:26  profilanswer
 

Bonjour,
 
Je suis en train d'écrire un programme en C sous Linux, qui accepte des arguments sur sa ligne de commande.
Pour l'instant, la ligne de commande ressemble à ceci :
 
<Programme> -c <fichier de config>
 
A l'exécution, le programme s'arrête tout de suite car pour lui, la variable qui récupère le nom du fichier de config est vide.
 
Comme ma fonction de traitement d'arguments (avec getopt) semblait correcte, j'ai mis en toute première instruction de la fonction 'main', une boucle qui affiche le contenu de ma variable 'argv'.
 
Et là, surprise : tout ce qui ressort, c'est :
<Programme>
<fichier de config>
 
Et j'obtiens toujours le même résultat, même si je rajoute une floppée d'options -x -r -g- s ...
Même en enlevant le caractère "-" des options, celles-ci ne sont pas vues.
 
J'ai l'impression que c'est un problème système, puisque les variables 'argc' et 'argv' passées à la fonction 'main' sont fausses dès le départ.
 
Ce problème évoque-t-il quelque chose à une âme charitable ? Quelqu'un a-t-il une solution ?
 
Merci d'avance !
 

mood
Publicité
Posté le 17-01-2011 à 17:52:26  profilanswer
 

n°2049720
Profil sup​primé
Posté le 17-01-2011 à 19:53:01  answer
 

Bonsoir,
Poste ton bout de code de test de argc et argv, peut-être ....

n°2049740
h3bus
Troll Inside
Posté le 17-01-2011 à 20:58:58  profilanswer
 

T'as pris en compte le fait que argv soit un tableau et commence à 0?


---------------
sheep++
n°2049820
shaoyin
Posté le 18-01-2011 à 10:28:15  profilanswer
 

Je pense faire les choses dans les règles. Voici le début de ma fonction "main":  
 

Code :
  1. int main ( int argc , char *argv[] ) {
  2. std::cerr << "argc = " << argc << std::endl;
  3. for ( int i = 0 ; i < argc ; ++i ) {
  4.  std::cerr << argv[i] << std::endl;
  5. }
  6. if ( parse_arguments ( argc , argv ) != 0 ) {
  7.  std::cerr << "Erreur dans les arguments" << std::endl;
  8. }
  9. ...


 
Le hic, c'est que argc vaut 2 dès l'entrée dans la fonction. Un peu comme si le système prenait la liberté de choisir ce qu'il transmet au programme.
 
 

n°2049823
Un Program​meur
Posté le 18-01-2011 à 10:38:51  profilanswer
 

je ne reproduis pas le probleme...
 

Code :
  1. $ cat shaoyin.cpp
  2. #include <iostream>
  3. int main(int argc, char *argv[])
  4. {
  5.     std::cerr << "argc = " << argc << std::endl;
  6.     for (int i = 0; i < argc; ++i) {
  7.         std::cerr << argv[i] << std::endl;
  8.     }
  9.     return 0;
  10. }
  11. $ g++ -o shaoyin shaoyin.cpp
  12. $ ./shaoyin -c config
  13. argc = 3
  14. ./shaoyin
  15. -c
  16. config
  17. $


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°2049828
shaoyin
Posté le 18-01-2011 à 11:01:40  profilanswer
 

Et heureusement !
 
Je me demande si le problème ne viendrait pas du fait que je compile sur une machine et que j'exécute le programme sur une autre.
Les deux machines ont la même distribution (CentOS), mais des versions différentes (5.2 pour la machine de développement, 5.5 pour la machine de test).
 
Je vais essayer de compiler le programme directement sur la machine de test.
 
[Edit] Après compilation sur la machine cible, le problème a disparu. Ca doit venir de mon environnement de développement. Reste à trouver où.
Merci en tout cas pour votre aide !


Message édité par shaoyin le 18-01-2011 à 11:23:19

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Perte d'arguments dans la ligne de commande

 

Sujets relatifs
Java : Executer une commande sous forme de String[VBS] Supprimer un bloc de lignes
[batch windows] Ecrire sur la même ligne ?[Résolu] Problème Commande ZIP Unix
Supprimer une ligne d'une table en php [résolu]Regroupement de résultats sur une seul ligne
lire seconde ligne d'un fichier avec fgets en crecuperer une info dans un .txt pour integrer à une commande
Renvoi du numéro de ligne d'une cellule en VBAModifier des capsules de texte sur une image en ligne
Plus de sujets relatifs à : Perte d'arguments dans la ligne de commande


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR