Сравнение строкового литерала приводит к неопределенному поведению - C ++ - PullRequest
0 голосов
/ 08 сентября 2011

Я использую затмение. Я объявил #define OUTPUT_FLAG "-o" и тогда у меня есть главное: int main(int argc, char **argv) после этого пишу:

    for (int i = 1; i < argc; i+=2)
    {
        if(argv[i]==INPUT_FLAG)
        {
            cout<<"input flag\n";
            input_file=argv[i+1];
        }
    }

и там я получаю ошибку по теме. Вы можете помочь мне здесь? Спасибо

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011

Вы не можете сравнивать строки с == в C ++. Вы должны либо использовать strcmp, либо преобразовать их в std::string s , а затем использовать оператор ==. То есть либо:

if (!strcmp(argv[i], INPUT_FLAG))

или

if (std::string(argv[i]) == INPUT_FLAG)
1 голос
/ 08 сентября 2011

Вы не можете сравнивать строки C (char *), используя оператор ==, поскольку этот оператор проверяет только равенство указателей (вместо разыменования указателя и сравнения каждого символа по одному).Используйте strcmp() или преобразуйте строку в argv[] в тип C ++ string.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...