C命令行参数检查
我在下面的代码中注意到,如果我将0改为1,结果是相同的。我得到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
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
}