C ++: чтение и сравнение из командной строки - PullRequest
2 голосов
/ 21 ноября 2011

Я читаю строку из командной строки, которая выглядит следующим образом:

"./test -C original.txt compressed.txt"

Переменная -C также может быть -D (не имеет значения, что они означают).

Я хочу проверить в своем коде, что это один из этих двух вариантов, но у меня возникают проблемы с использованием массива символов argv[] в моем коде.

Вот что я пытаюсь сделать в своем утверждении if:

if((strcmp(av[1], "-C") == 0)||(strcmp(av[1], "-c") == 0))

Я также пытался напрямую сравнивать значения

if((av[1] == "-C") || (av[1] == "-c"))

Ответы [ 3 ]

2 голосов
/ 21 ноября 2011

Если вы используете c ++, лучше использовать std::string:

if((std::string(argv[1]) == "-C") || (std::string(argv[1]) == "-c"))

если она все еще не работает, попробуйте распечатать переменную и посмотреть, соответствует ли она ожидаемому.

1 голос
/ 21 ноября 2011

Если прототип main() равен int main(int argc, char *argv[]);, то правильный способ проверить, является ли первый аргумент "-c" или "-C", без использования std::string s это

if((strcmp(argv[1], "-C") == 0)||(strcmp(argv[1], "-c") == 0))
   // do things

Вам может понадобиться #include <cstring>, чтобы использовать strcmp()

0 голосов
/ 21 ноября 2011
if((argv[1] == "-C") || (argv[1] == "-c"))

это не может работать, так как argv [1] указывает на определенный массив символов, который содержит первый аргумент командной строки.с другой стороны «-c» - это постоянный указатель на другой массив символов, который содержит «-C»

, поэтому он не сравнивает значения, на которые фактически указывают указатели, а сравнивает адресаиз двух массивов, которые, скорее всего, будут отличаться в любом случае, я могу себе представить ...

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