在C中检查命令行参数

时间:2016-10-28 02:10:57

标签: c parsing segmentation-fault argv argc

我编写此代码以从命令行获取输入,并根据输入执行一组操作,或者如果输入不正确,则会引发错误。但是,我还需要检查是否没有提供参数,我试图在我的else语句中考虑这些参数。

if(strcmp(argv[1], "-L") == 0) 
{
    //does stuff
}


else if(strcmp(argv[1], "-W") == 0)
{

    //does stuff

}

else if (*(argv[1]) != 1)
{
    puts("error: invalid input");
}

else //should check if no arguments
{
    puts("error: expected command line argument");
    return 1;
}

每当命令行没有参数时,我就会遇到分段错误,我不知道如何修复它。我也尝试用这种方式编写else语句:

else if(argc < 2)
{
    puts("error: expected command line argument");
    return 1;
}

这是基于我之前在这里的研究,我发现“如果在命令行中没有给出参数,则会产生C错误”,但它也不起作用。我是C语言的初学者,并不完全理解argc和argv,所以如果有人有任何建议或逻辑我完全忽视,请告诉我。

2 个答案:

答案 0 :(得分:2)

您需要先检查if argc < 2

否则会出现分段错误,因为argv[index]可能是您无法访问的权限。

答案 1 :(得分:0)

无论你做什么,请确保永远不要尝试访问argv的索引,该索引大于或等于argc。在您的情况下,当最后一个可用索引为0(argc为1)时,您正在访问索引1,这就是分段错误的原因。有关详情,请参阅此帖子:What does int argc, char *argv[] mean?