Не удалось проверить второй символ в argv [] в C - PullRequest
0 голосов
/ 27 января 2012

Я хотел бы проверить аргументы в argv[], но он не может проверить второй символ.Например,

Я могу сделать это:

int main(int argc, char *argv[]){
  if (*argv[1] == "A")
    printf("Hello: %s\n", argv[1]);
}

Однако я не могу проверить argv[1], когда я изменяю «A» на «AB» следующим образом:

if (*argv[1] == "AB")
  printf("Hello: %s\n", argv[1]);
}

Ответы [ 4 ]

3 голосов
/ 27 января 2012

Строки сравниваются с strcmp() в C, почти никогда с ==:

if(strcmp(argv[1], "AB") == 0)
  printf("the second argument is AB\n");

Обратите внимание, что 0 возвращается, когда сравниваемые строки равны.

1 голос
/ 27 января 2012

В этой строке:

if (*argv[1] == "AB")

вы сравниваете char с char*.Это разные типы.Кроме того, даже если первый операнд был char*, вы все равно не должны использовать == для сравнения строк, поскольку он просто сравнивает значения указателя.Используйте strncmp() вместо

if (strncmp("AB", argv[1], 2) == 0)

Это условие выполняется, если два первых символа argv[1] равны "AB", например, если argv[1] равно "ABC".Если вы хотите проверить, что argv[1] в точности "AB", используйте strcmp() вот так

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

Обратите внимание, что для сравнения отдельных символов вполне допустимо использовать ==:

if (argv[1][0] == 'A')

Кроме того, прежде чем предположить, что argv[1] является действительным, вы должны проверить argc, чтобы убедиться, что вы действительно получили аргумент.

0 голосов
/ 27 января 2012

Вы должны прекратить сравнивать указатели и символы, это не здорово.

Вы можете сделать *argv[1]=='A'. И когда приходит два двух символа, вы должны использовать strncmp.

0 голосов
/ 27 января 2012

*argv[1] является char. Вы не должны сравнивать его со строкой (char*). Если вы хотите проверить, является ли это буквой A, выполните if (*argv[1]=='A'). Если вы хотите проверить весь аргумент, сделайте это как strcmp(argv[1],"AB")

.
...