C++ 比较命令行参数与 strcmp

C++ Comparing command line arguments with strcmp

为了检查程序其余部分所需命令的命令行参数,我尝试使用 strcmp 来测试给定的参数是否正确。

if((argc != 2) || (strcmp(argv[1], "-first") != 0) || (strcmp(argv[1], "-all") != 0))
    return -1;

此代码导致程序立即关闭并出现以下错误:

Program ended with exit code: 255

我确定问题来自两个 strcmp 函数调用,但根据我的研究,我正确地使用了它们。

这个if语句总是会被输入。如果 argv[1] 不等于两个字符串之一,则您正在输入它。但这永远是真的。如果是 -first 那么显然不是 -all。而如果是-all,显然就不是-first.

所以你的程序总是return有一些错误状态。

您要做的是检查 argv[1] 不等于 所有 选项:

if(argc != 2 || (strcmp(argv[1], "-first") != 0 && strcmp(argv[1], "-all") != 0))
  return -1;

我还冒昧地删除了一些过于谨慎的括号。您应该学习正确的词法运算符优先级。过度使用括号会导致代码不必要地混乱。仅在它们 添加 或实际需要时才应用它们。