Void Main(int argc) comment gerér les arguments?

Void Main(int argc) comment gerér les arguments? - C++ - Programmation

Marsh Posté le 12-02-2003 à 13:54:07    

salut je ne comprends pas bien le passage d'argument pour la fction main
 
void main(int argc, char* argv)
{
 
 
}
 
? je voudrais passer un paramètre à mon appli (ligne de commande)
 
comment recupéré le paramètre passé ou les params?
 
merci :)

Reply

Marsh Posté le 12-02-2003 à 13:54:07   

Reply

Marsh Posté le 12-02-2003 à 13:59:00    

Code :
  1. int main(int argc, char ** argv)
  2. {
  3.   //argv[0] est le nom de la programme
  4.   //argv[1] est le premier argument passé au programme
  5.   // ...
  6.   //argv[n] est le n-ième argument passé au programme
  7. }

Reply

Marsh Posté le 12-02-2003 à 14:58:28    

Et argc le nombre de param, le nom de l'exe étant contenu dans argv[0] (donc argc >= 1).

Reply

Marsh Posté le 12-02-2003 à 16:59:30    

pourquoi char * * :whistle:

Reply

Marsh Posté le 12-02-2003 à 17:00:47    

c'est un pointeur sur un tableau de chaîne, dont un pointeur sur un tableau de tableau de char


Message édité par MagicBuzz le 12-02-2003 à 17:01:19
Reply

Marsh Posté le 12-02-2003 à 17:48:20    

En gros, si un char* peut "contenir" une chaîne, un char** peut en "contenir" plusieurs.
 
(Tu peux remplacer "contenir" par "pointer vers", c'est plus coule :) )

Reply

Marsh Posté le 12-02-2003 à 17:54:52    

AGA > achète un bouquin et potasse, c'est le b-a ba ça franchement... :pfff:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 12-02-2003 à 20:58:52    

Harkonnen a écrit :

AGA > achète un bouquin et potasse, c'est le b-a ba ça franchement... :pfff:


ouaip, j'ai acheté un truc sur Visual C++ :/
alors que les MFC ou truc dans le genre  :o
 
je vais chercher un book mieux ciblé. :jap:  

Reply

Marsh Posté le 13-02-2003 à 09:35:38    

:cry:  
 
j'ai un socket il a donc besoin d'une IP:

Citation :

sin.sin_addr.s_addr   = inet_addr("192.168.0.10" );


 
mais si je mets  
inet_addr(argv[1])
il veut pas :/
 

Code :
  1. Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
  2. getconf.cpp:
  3. Error E2034 getconf.cpp 41: Cannot convert 'char * *' to 'const char *' in function main(int,char * * *)
  4. Error E2342 getconf.cpp 41: Type mismatch in parameter 'cp' (wanted 'const char *', got 'char * *') in function main(int,char * * *)
  5. *** 2 errors in Compile ***


 
 :sweat:  
 
OK les pointeurs de bases c'est pas hypra difficile à comprendre, mais là :/

Reply

Marsh Posté le 13-02-2003 à 09:48:48    

argv[1] est un pointeur ! si tu veux récupérer la chaine, tu dois saisir *(argv[1])
 
c'est pas propre du tout mais bon.... :/

Reply

Marsh Posté le 13-02-2003 à 09:48:48   

Reply

Marsh Posté le 13-02-2003 à 09:50:06    

Harkonnen a écrit :

argv[1] est un pointeur ! si tu veux récupérer la chaine, tu dois saisir *(argv[1])


 :heink: la tu récupere juste le premier char...
 
nan, le probleme, c'est que char ** truc != char *** brol

Reply

Marsh Posté le 13-02-2003 à 10:02:28    

lorill a écrit :


 :heink: la tu récupere juste le premier char...


euh, oui merde ! ça m'apprendra à répondre en 10 secondes entre 2 réunions :/

Reply

Marsh Posté le 13-02-2003 à 10:09:31    

lorill > mais j'ai raison en + !! j'ai fait un test rapide qui fonctionne nickel !!
 

Code :
  1. #include <iostream.h>
  2. int main( int argc, char* argv[] ) {
  3.    cout << "Le nom du programme est : " << argv[0] << endl;
  4.  
  5.    cout << "Tu as saisi " << argc-1 << " arguments" << endl;
  6.    for ( int i = 1; i < argc; ++i ) {
  7.       cout << argv[i] << endl;
  8.    }
  9.    return 0;
  10. }


 
ça marche nickel ! c'est qu'il me ferait douter en + !!
 
edit: ah ben non effectivement, c'est moi qui me suis loupé sur mon précédent post :whistle:


Message édité par Harkonnen le 13-02-2003 à 10:13:25
Reply

Marsh Posté le 13-02-2003 à 10:11:52    

Harkonnen a écrit :

lorill > mais j'ai raison en + !! j'ai fait un test rapide qui fonctionne nickel !!
ça marche nickel ! c'est qu'il me ferait douter en + !!


harko, reveille toi... la tu affiches les chaines, et tu prends argv[i], ce qui est parfaitement normal... Mais tu disais qu'il fallait mettre *(argv[i]), hors ce n'est pas ce que tu as mis dans ton test :o

Reply

Marsh Posté le 13-02-2003 à 10:14:21    

je m'en suis rendu compte en meme temps que toi apparemment, j'ai édité :d

Reply

Marsh Posté le 13-02-2003 à 21:06:11    

leneuf22 a écrit :

En gros, si un char* peut "contenir" une chaîne, un char** peut en "contenir" plusieurs.
 
(Tu peux remplacer "contenir" par "pointer vers", c'est plus coule :) )


 
Dans l'exemple de Harkonen, il a mis char* et on peut avoir plusieurs arguments :/
le double * j'ai du mal  :sweat:

Reply

Marsh Posté le 13-02-2003 à 21:12:28    

AGA a écrit :


 
Dans l'exemple de Harkonen, il a mis char* et on peut avoir plusieurs arguments :/
le double * j'ai du mal  :sweat:  


j'ai mis char *argv[]
ce qui signifie que je déclare un tableau de pointeurs. et chaque "case" de ce tableau contient un pointeur vers une chaine de caractères.
 
char **argv est identique à char* argv[]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 13-02-2003 à 21:30:32    

Harkonnen a écrit :


j'ai mis char *argv[]
ce qui signifie que je déclare un tableau de pointeurs. et chaque "case" de ce tableau contient un pointeur vers une chaine de caractères.
 
char **argv est identique à char* argv[]


là c'est clair :jap:  
 
(comme un boolay j'ai du mettre char **arg[])
 
avec le tableau c'est clair .
 
Dans le cas de char **argv
comment manipulerais t'on?
 
merci bcp

Reply

Marsh Posté le 13-02-2003 à 21:41:30    

AGA a écrit :


Dans le cas de char **argv
comment manipulerais t'on?


l'example que je t'ai donné plus haut fonctionne aussi avec **argv.
 
sinon, tu as aussi :

Code :
  1. #include <iostream.h>
  2.  
  3.   int main( int argc, char **argv) {
  4.    
  5.        cout << "Le nom du programme est : " << *argv++ << endl;
  6.        
  7.        cout << "Tu as saisi " << argc-1 << " arguments" << endl;
  8.    
  9.        for ( int i = 1; i < argc; ++i ) {
  10.             cout << *argv++ << endl;
  11.        }
  12.    
  13.        return 0;
  14.   }


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 13-02-2003 à 21:58:01    

note pour Musaran & Taz : je sais très bien que le code ci-dessus est deprecated, mais déja qu'il en bave avec les arguments, qu'il apprenne déjà ça, les namespaces viendront après :d


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 14-02-2003 à 13:35:59    

Harkonnen a écrit :

note pour Musaran & Taz : je sais très bien que le code ci-dessus est deprecated, mais déja qu'il en bave avec les arguments, qu'il apprenne déjà ça, les namespaces viendront après :d


merci ;)
 
Oui après :o
 
heu... sinon maintenant?
 
Parceque du code perimé c'est :/
 
J'ose te demander la version UpToDate? :whistle:  
 
merci

Reply

Marsh Posté le 14-02-2003 à 13:49:23    

AGA a écrit :


merci ;)
Oui après :o
heu... sinon maintenant?
Parceque du code perimé c'est :/
J'ose te demander la version UpToDate? :whistle:  
merci


Code :
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.   int main(int argc, char **argv) {
  5.    
  6.        cout << "Le nom du programme est : " << *argv++ << endl;
  7.        
  8.        cout << "Tu as saisi " << argc-1 << " arguments" << endl;
  9.    
  10.        for ( int i = 1; i < argc; ++i ) {
  11.             cout << *argv++ << endl;
  12.        }
  13.    
  14.        return 0;
  15.   }


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 14-02-2003 à 14:01:31    

Citation :

*argv++


 
[:totoz]

Reply

Marsh Posté le 14-02-2003 à 14:04:07    

chrisbk a écrit :

Citation :

*argv++


[:totoz]


l'arithmétique sur les pointeurs, cai bon, mangez en  ;)

Reply

Marsh Posté le 14-02-2003 à 14:05:38    

lorill a écrit :


l'arithmétique sur les pointeurs, cai bon, mangez en  ;)  


 
j'ai horreur de ces combinaisons d'instructions :D
 
en plus pour ce qu'il fait, un argv[i] aurait tout aussi bien fait l'affaire, en etant tellement plus agréable a regarder  [:ddr555]

Reply

Marsh Posté le 14-02-2003 à 14:07:06    

chrisbk a écrit :


j'ai horreur de ces combinaisons d'instructions :D


moi je suis fan, surtout si on les mets dans des conditions un peu longues, le tout dans un for  :love:

Reply

Marsh Posté le 14-02-2003 à 14:18:33    

j'ai beaucoup de mal à saisir l'utilité de l'arithmetique des pointeurs en C++ (en C, je suis antièrement d'accord mais C++ ...)

Reply

Marsh Posté le 14-02-2003 à 14:20:06    

chrisbk a écrit :


 
j'ai horreur de ces combinaisons d'instructions :D
 
en plus pour ce qu'il fait, un argv[i] aurait tout aussi bien fait l'affaire, en etant tellement plus agréable a regarder  [:ddr555]
 


ben il a voulu la version avec **argv, je lui donne la version avec **argv [:sinclaire]

Reply

Marsh Posté le 14-02-2003 à 14:23:42    

d'un autre coté le char **argv c'est aussi ce qui est marqué dans le topic sur les declarations de Main (les biens, les moins biens , les périmées etc...) :o
mais moi j'aime mieux char *argv[] :whistle:

Reply

Marsh Posté le 14-02-2003 à 14:24:40    

lorill a écrit :


moi je suis fan, surtout si on les mets dans des conditions un peu longues, le tout dans un for  :love:  


 
avec des variables qui s'appelent gato, a, tmp, hein, avoue ? [:ddr555]
 

Reply

Marsh Posté le 14-02-2003 à 14:26:36    

chrisbk a écrit :


avec des variables qui s'appelent gato, a, tmp, hein, avoue ?  


mmh, presque ;)
plop, kikoo, coin, gerard, selon le moment  :whistle:

Reply

Marsh Posté le 14-02-2003 à 17:16:54    

kler, moi ossi j'adore un bon go FOR bien chargé et bien lisible :)


---------------
kil fé bon programmer en c lieux
Reply

Marsh Posté le 15-02-2003 à 01:09:28    

Code :
  1. const char *foo= "Le code peut être illisible, seul le résultat compte.\n", *bar= "\r\r\0-\0\nE\1p)R\35N\236\21\34\21I\6\2L\r\6I\1\3\1IU\1E\21\3I\30E\312\6\233\26\125\34\21\23\27E\23\33\4\22\30\0\0";
  2. for(;*foo;putchar(*foo++^*bar++)); //pour affichage ANSI

 :D


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 15-02-2003 à 10:08:11    

heu ... là c peut etre un peu tro barbare  :heink:


---------------
kil fé bon programmer en c lieux
Reply

Marsh Posté le 15-02-2003 à 11:24:46    

Musaran a écrit :

Code :
  1. const char *foo= "Le code peut être illisible, seul le résultat compte.\n", *bar= "\r\r\0-\0\nE\1p)R\35N\236\21\34\21I\6\2L\r\6I\1\3\1IU\1E\21\3I\30E\312\6\233\26\125\34\21\23\27E\23\33\4\22\30\0\0";
  2. for(;*foo;putchar(*foo++^*bar++)); //pour affichage ANSI

 :D


 
 
heureusement qu'il y a le commentaire pour qu'on comprenne bien ! [:dawa]

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed