C命令行参数检查

C命令行参数检查,c,command-line-arguments,C,Command Line Arguments,我在下面的代码中注意到,如果我将0改为1,结果是相同的。我得到STACKprint()以“on”作为第二个参数,没有任何其他参数,如果没有参数,则会出现分段错误。我想对于分段错误,我需要检查参数是否为NULL,但我不确定如何使用第二个参数,它确实让我感到困惑,为什么(strcmp(argv[2],“on”)==1)没有效果。它不应该取真值吗 if (strcmp (argv[2],"on") == 0) { STACKprint(); print

我在下面的代码中注意到,如果我将0改为1,结果是相同的。我得到
STACKprint()以“on”作为第二个参数,没有任何其他参数,如果没有参数,则会出现分段错误。我想对于分段错误,我需要检查参数是否为
NULL
,但我不确定如何使用第二个参数,它确实让我感到困惑,为什么
(strcmp(argv[2],“on”)==1)
没有效果。它不应该取真值吗

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

为避免SEGVULT,请检查
argc
的值,以了解
argv[2]
是否存在。如果
argc<3
,则未提供
argv[2]


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

如果您的程序是这样的

#include <stdio.h>


  int main (int argc, char**argv)
  {
     if (argc >= 3 && strcmp (argv[2],"on") == 1){
  //        STACKprint();
          printf("\n");
      }
  }
#包括
int main(int argc,字符**argv)
{
如果(argc>=3&&strcmp(argv[2],“on”)==1){
//STACKprint();
printf(“\n”);
}
}
如果您尝试在启用
的情况下运行它,它将永远不会进入if块 如果你把1改成0,它就会消失

还有别的问题


如果您可以发布代码和调用代码的方式,那就太好了。

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

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

为了防止分段错误,您需要检查
argc
。您可以使用
argc
(一个计数)来确定
argv[2]
是否存在。@aschepper对于愚蠢的问题表示抱歉,但什么是
STACKprint()
?将0更改为1应该会改变结果。还有别的问题。您是否可以编辑您的帖子,使其包含整个
main()
函数(1已就位),并显示输出?确定要
strcmp(argv[2],“on”)==1
而不是
strcmp(argv[2],“on”)==0
strcmp(argv[2],“on”)!=0
?在chux上有良好的表现。这将无法按预期工作(您的意思是
argc)
if (0 == strcmp(argv[2], "on")) {
   // do something
} else {
   // do something else
}