Не могу тренироваться Почему это условие С не удается - PullRequest
0 голосов
/ 24 ноября 2010

У меня проблема с некоторым кодом C, который я пишу как часть университетского задания.Рассмотрим код:

printf("%s\n", argv[1]);
if ((argv[1] == "--verbose") || (argv[1] == "-v")) {
  printf("%d\n", argc);
}

сейчас: printf("%s\n", argv[1]); выводит "--verbose", поэтому я знаю, что argv[1] == "--verbose" должно быть истинным, но строка printf("%d\n", argc); никогда не выполняетсяИ я не могу тренироваться почему.Есть идеи?

Ответы [ 5 ]

9 голосов
/ 24 ноября 2010

Используйте функцию strcmp:

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

== проверяет, что два указателя имеют один и тот же адрес, а это не то, что вам нужно.

3 голосов
/ 24 ноября 2010

См. Статья в Википедии strcmp.

. Здесь вы не можете сравнивать строки напрямую с оператором == в C. Это будет сравнивать только указатели на строки, который будет другим.

1 голос
/ 24 ноября 2010

Разве вы не должны использовать strcmp для сравнения строк? Конечно, argv[1] == "--verbose" не сравнится для равенства строк с буквой.

1 голос
/ 24 ноября 2010

Поскольку вы не можете сравнивать строки с == в C. Используйте strcmp или подобное.

0 голосов
/ 24 ноября 2010

В вашем коде вы фактически сравниваете содержимое указателя argv[1] (который указывает на строку, содержащую первый аргумент вашей программы) с адресом каждого строкового литерала ("-v" и т. Д.).Это гарантированно будет ложным во всех случаях.

Вы должны использовать функцию strcmp() или аналогичную для сравнения самих строк, а не их адресов.

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