Странная проблема с argv в заявлении if
У меня возникли проблемы с argv в операторе if в одной из моих программ на языке Си. Я знаю, что, должно быть, упускаю что-то простое и глупое (я уже давно ничего не делал в с). Проблема в том, что он не будет выполнять функцию doOtherStuff (), если я не укажу ничего другого в командной строке. Даже если я это сделаю ./ a. out-i он все еще работает doStuff (). Кто-нибудь видит, чего здесь может не хватать? Заранее большое вам спасибо!
int main(int argc, char *argv[])
if(argv[1] == "-a" || "-A")
{
doStuff();
}
else
{
doOtherStuff();
}
}
2 ответа:
Если вы хотите сравнить строки в C, вы должны использовать такие методы, как strcmp: http://www.cplusplus.com/reference/cstring/strcmp/
В C строка на самом деле является массивом символов, поэтому вы сравниваете адрес памяти 2 массивов (которые, конечно, будут отличаться, так как это разные массивы).
Вы сравниваете C-строки с оператором равенства (
==
).Вместо этого вы должны использовать функцию strcmp (определенную в
string.h
).Как:
Обратите внимание, что сравнение строк-одна из самых простых операций в программировании, и Ваше утверждение#include <string.h> int main(int argc, char *argv[]) { if(strcmp(argv[1], "-a") == 0 || strcmp(argv[1], "-A") == 0) { doStuff(); } else { doOtherStuff(); } }
if
также не было правильным. Попробуйте прочитать больше об основах, если вы еще не делаете этого.