无法检查C中argv []中的第二个字符

时间:2012-01-27 11:49:00

标签: c arrays string comparison argv

我想检查argv[]中的参数,但是它无法检查第二个字符。 例如,

我可以这样做:

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

但是,当我将“A”更改为“AB”时,我无法检查argv[1]

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

4 个答案:

答案 0 :(得分:3)

字符串与C中的strcmp()进行比较,几乎从不与==进行比较:

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

注意,当比较的字符串相等时,返回0。

答案 1 :(得分:1)

在这一行:

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

您要将charchar*进行比较。这些是不同的类型。此外,即使第一个操作数是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以确保您确实已经获得了参数。

答案 2 :(得分:0)

*argv[1]char。你不应该将它与字符串(char*)进行比较。如果你想检查它是否是A,请if (*argv[1]=='A')如果要查看整个论点,请执行strcmp(argv[1],"AB")

答案 3 :(得分:0)

你应该停止比较指针和字符,这不健康。

你可以*argv[1]=='A'。如果有两个两个字符,则应使用strncmp