Я пытаюсь сравнить параметр команды с argv [], но это не работает. Вот мой код.
./a.out -d 1
В основной функции
int main (int argc, char * const argv[]) {
if (argv[1] == "-d")
// call some function here
}
Но это не работает... Я не знаю, почему это сравнение не работает.
Вы не можете сравнивать строки, используя ==
. Вместо этого используйте 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
.
В 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
}