C命令行参数检查

C command line argument check

我有下面的代码部分,我注意到如果我将 0 更改为 1,结果是相同的。我得到 STACKprint(); 和 "on" 作为第二个参数,没有任何其他参数,如果没有参数,我会得到一个分段错误。我想对于分段错误,我需要检查参数是否为 NULL,但我不确定如何使用第二个参数执行此操作,这让我很困惑,为什么 (strcmp (argv[2],"on") == 1) 没有效果。它不应该取真值吗?

 if (strcmp (argv[2],"on") == 0) {
            STACKprint();
            printf("\n");
 }

为了避免段错误,检查 argc 的值以发现 argv[2] 是否存在。如果 argc < 3,未提供 argv[2]

strcmp() 没有 return true/false;它 return 是一个小于、等于或大于零的值,具体取决于其参数的相对值。

如果你的程序是这样的

#include <stdio.h>


  int main (int argc, char**argv)
  {
     if (argc >= 3 && strcmp (argv[2],"on") == 1){
  //        STACKprint();
          printf("\n");
      }
  }

然后你尝试用myexe 1 on运行它,它永远不会进入if块 如果您将 1 更改为 0,它就会消失。

还有其他问题。

如果你能post你的代码和调用它的方式就好了。

首先,要检查是否有参数,你应该使用main(int argc, char** argv)的argc变量,它指示你的argv数组的长度。

if (argc < 3) {
  printf("missing argument\n");
  exit(-1);
}

至于strcmp,手册页仅说明如果参数中的两个字符串相等则returns 0,否则非零...但不一定为1。实际上它取决于实现。因此,使用它来检查字符串相等性的方法是:

if (0 == strcmp(argv[2], "on")) {
   // do something
} else {
   // do something else
}