Salut,
Il faut savoir que, quand tu utilises la version de main basée sur
int main(int argc, char * argv[])
le nombre minimum d'argument obtenu (celui que tu obtiens en lançant l'application avec nom_du_programme ) est... 1.
argv[0] (car les indices sont comptés à partir de 0) vaut donc nom_du_programme, à quelques variantes près (selon le système d'exploitation, il contient le nom du dossier, ou non).
Les arguments suivants apparaissent dans l'ordre dans lequel l'utilisateur les a indiqués, c'est à dire que si tu introduits nom_du_programme *, argc vaut bien 2, mais tu récupèreras l'astérisque dans argv[1].
Si donc tu t'attends à obtenir l'affichage de l'astérisque avec un code proche de
1 2 3 4 5 6 7 8 9 10 11
| int main(int argc, char * argv[])
{
if(argc != 3) // ben oui, pour avoir argv[2], faut trois valeurs ;)
{
std::cout<< "erreur : veuillez invoquer le programme sous la forme"
<< " de mon_programme arg1 arg2";
exit(1);
}
std::cout<<argv[2];
return 0;
} |
il faudra, comme l'indique le message d'erreur que j'ai rajouté, invoquer ton programme sous la forme de mon_programme truc *.
Si, par contre, tu t'attends à ce que l'astérisque suive directement le nom du programme (donc que tu invoques ton programme sous la forme de mon_programme *), ce n'est pas argv[2] qu'il faudra afficher mais... argv[1]
[EDIT]Tu pourrais d'ailleurs obtenir l'affichage de l'ensemble sous une forme proche de
1 2 3 4 5 6 7 8
| int main (int argc, char * argv[])
{
for(int i = 0; i <argc ; ++i)
{
std::cout << "considere "<<argv[i]
<<" comme argument "<<i<< std::endl;
}
} |
[/EDIT]
Partager