2017-02-19 14 views
2

Это C++Как получить элемент из ARGV []

В окнах CMD линия типов пользователей

p3.exe X <data.txt 

где "p3.exe" это название программы,

«X «будет 1, 2 или 3,

и« data.txt »- это некоторая программа для текстовых файлов, используемая для ввода.

Внутри основного метода я ожидаю, что argv [1] будет равен строке X, введенной в строку cmd. Фактически, если я делаю

wcout << argv[1] 

Выход «X», как и ожидалось.

Так что теперь я делаю это,

int main(int argc, char* argv[]) 
{ 
    if (argc > 1) 
    { 
      if (argv[1] == "X") 
      { 
       //do stuff 
      } 
    } 
    return 0; 
} // end main 

Но (ARGV [1] == "X") никогда не оценивает истинного

Что мне не хватает или нет понимания?

+0

И какое значение хранится в 'argv [1]'? Вы пытались использовать отладчик, чтобы пройти через свой код, чтобы узнать это? –

+0

@ AlgirdasPreidžius Вопрос гласит, что OP сделал. – interjay

+0

@interjay О, не заметил, что:/Возможно, снял вопрос, чтобы быстро:/ –

ответ

4

Вы не можете сравнить строки стиля C (char *) с ==, потому что он сравнивает только указатель, а не целую строку.

Вы можете использовать strcmp:

if (strcmp(argv[1], "X") == 0) 

или убедитесь, что по крайней мере одна сторона сравнения является C++ строка:

if (std::string(argv[1]) == "X") 
+0

Оба работают отлично. Итак, второй ответ работает путем «каста» указателя argv [1] на строку? – greg

+0

Да, он копирует строку C во временный объект std :: string, который используется для выполнения сравнения. Если вы хотите сравнить 'argv [1]' с несколькими значениями, вы можете создать строку в отдельной строке, а затем сравнить ее с каждым значением. – interjay

0

Использование if(strcmp(argv[1],"X")==0) .... Должно решить проблему.