2010-09-06 11 views
2

Je fais une validation des arguments passés par la ligne de commande en C++ et j'ai quelques difficultés.Comparaison d'arguments en ligne de commande C++

que je fais comme si

./a.exe inputfile.txt outputfile.txt 16 flush_left 

Et je suis en train de faire la validation comme si

if(argv[4] == "flush_left" || argv[4] == "flush_justify" || argv[4] == "flush_right"){ 

Et sa ne fonctionne pas comme prévu. Bien que je ne vois pas pourquoi cela ne fonctionnera pas. De tout ce que je l'ai lu et vu que cela devrait être très bien

+1

devrait-il être args [3]? –

+1

@moi Non '0: ./a.exe',' 1: fichierd'entrée.txt', '2: fichierSortie.txt',' 3: 16', '4: flush_left' –

Répondre

11

essayer:

std::string argv4 = argv[4]; 
if(argv4 == "flush_left" || argv4 == "flush_justify" || argv4 == "flush_right"){ 
    //... 
} 

ou (non testé):

if(argc >=4 && (!strcmp(argv[4],"flush_left") || !strcmp(argv[4],"flush_justify") || !strcmp(argv[4],"flush_right"))) { 
    //... 
} 

argv [4] est de type char* et chaînes littérales ont tapez const char*, vous ne pouvez pas comparer le contenu de ces types (= texte) en utilisant l'opérateur ==, vous devrez utiliser quelque chose comme strcmp ou la classe std::string à la place. L'utilisation de == sur char* compare l'adresse des variables, pas le contenu.

+0

+1: J'étais un peu hâte, enlevé ma réponse. –

+0

Une autre possibilité est d'utiliser strcmp(). J'irais avec std :: string, comme vous l'avez montré, cependant. –

+2

"strcmp/strncmp renvoie la quantité de caractères qui ne correspondent pas" - c'est une assertion courageuse. Voulez-vous indiquer votre source pour cela? – paxdiablo

2

inputfile.txt ./a.exe OutputFile.txt 16 flush_left

A argv base zéro vous donne: argv [0] = a.exe argv [1] = inputfile.txt argv [2 ] = outputfile.txt argv [3] = 16 argv [4] = flush_left

si l'indice est correct, mais vous devez utiliser strcmp (stringa, chaineB) et assurez-vous que renvoie 0 à la place.