C编程中argv[1]与string的比较

Comparison between argv[1] and string in C programming

我写了一些代码,尝试将 argv[1] 与字符串 "o" 和字符串 "m" 进行比较,如果我在 argv[] 中找不到它,则打印错误.问题是,该程序没有按预期运行。这就是我所做的:

int main(int argc, char *argv[])
{
  if((strcmp(argv[1], "o") != 0) || (strcmp(argv[1], "m") != 0))
  {
    printf("error\n");
  }
    return 0;
}

您的支票

if((strcmp(argv[1], "o") != 0) || (strcmp(argv[1], "m") != 0))
{
    printf("error\n");
}

可以翻译成

Raise an error if the first argument of the program IS NOT equal to 'o' AND at the same time IS NOT equal to 'm'

(实际上,strcmp () returns 比较的字符串相等时为0)

避免错误的唯一可能方法是参数等于 'o' 和 'm' 同时 。这显然是不可能的。

你有两个选择。首先你可以执行正向检查:

if((strcmp(argv[1], "o") == 0) || (strcmp(argv[1], "m") == 0))
{
    ...
}
else
{
    printf("error\n");
}

或否定支票(像你的)。在这种情况下,您需要参数不是 'o' 并且它不是 'm'(逻辑运算符 &&):

if((strcmp(argv[1], "o") != 0) && (strcmp(argv[1], "m") != 0))
{
    printf("error\n");
}