Сравнение параметра команды с argv [] не работает

Я пытаюсь сравнить параметр команды с argv [], но это не работает. Вот мой код.

./a.out -d 1

В основной функции

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

if (argv[1] == "-d")

    // call some function here

}

Но это не работает... Я не знаю, почему это сравнение не работает.

10
задан philant 29 July 2010 в 19:01
поделиться

4 ответа

Вы не можете сравнивать строки, используя ==. Вместо этого используйте strcmp.

#include <string.h>

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

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

// call some function here

}

Причина в том, что значение "..." - это указатель, представляющий расположение первого символа в строке, а остальные символы - после него. Когда вы указываете "-d" в своем коде, это создает в памяти совершенно новую строку. Поскольку расположение новой строки и argv[1] не совпадают, == вернет 0.

26
ответ дан 3 December 2019 в 14:17
поделиться

Возможно, вы захотите использовать здесь strcmp.

2
ответ дан 3 December 2019 в 14:17
поделиться

разве это не будет:

if (argv[0] == "-d")

0 не 1 ?

-4
ответ дан 3 December 2019 в 14:17
поделиться

В C ++ пусть std :: string сделает всю работу за вас:

#include <string>
int main (int argc, char * const argv[]) {

if (argv[1] == std::string("-d"))

// call some function here

}

В C вам придется использовать strcmp:

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

// call some function here

}
11
ответ дан 3 December 2019 в 14:17
поделиться