2015-12-10 3 views
-5

Я разбор аргументов из командной строкиесли строки равны - если оператор

код

for(int i = 1; i < argc; i++){ 
    cout << i << " " << argv[i] << "\n"; 
    if(argv[i] == "-width"){ 
     cout << " width = " << argv[i] << "\n"; 
    } 
} 

команда

./txtbin test.jpg -width 100 out.jpg 

результата

1 test.jpg 
2 -width 
3 100 
4 out.jpg 

почему это строка внутри оператора if не печатается?

cout << " width = " << argv[i] << "\n"; 

ответ

5

Поскольку argv представляет собой массив указателей на Чаре, и вы не можете просто сравнить указатель на символ и строку буквального. Для того, чтобы решить вашу проблему, вы можете конвертировать и в std::string, как это:

if(std::string(argv[i]) == "-width") 

В противном случае, вы можете использовать strcmp для сравнения C строк как показано in the docs.

+1

Вторая строка 'std :: string' избыточна, и преобразование в строку кажется немного тяжелым, поскольку' strcmp' существует для работы с строками стиля c – NathanOliver

+0

@NathanOliver, я просто добавлял это в свой ответ, когда увидел ваш комментарий (Я был занят поиском ссылки, поэтому сначала не включал ее). – ForceBru

Смежные вопросы