Странная проблема с argv в заявлении if


У меня возникли проблемы с argv в операторе if в одной из моих программ на языке Си. Я знаю, что, должно быть, упускаю что-то простое и глупое (я уже давно ничего не делал в с). Проблема в том, что он не будет выполнять функцию doOtherStuff (), если я не укажу ничего другого в командной строке. Даже если я это сделаю ./ a. out-i он все еще работает doStuff (). Кто-нибудь видит, чего здесь может не хватать? Заранее большое вам спасибо!

int main(int argc, char *argv[])

    if(argv[1] == "-a" || "-A")
    {
       doStuff();
    }
    else
    {
        doOtherStuff();
    }
}
2 2

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 также не было правильным. Попробуйте прочитать больше об основах, если вы еще не делаете этого.