我有以下代码:
int main(int argc, char *argv[])
{
if(strcmp(argv[1],"-e")==0)
{
//perform code
}
//code if argv[1] is not "-e"
return 0;
}
当我拿出整个if语句时:
if(strcmp(argv[1], "-e")==0)
我的代码如果strcmp(argv [1],“ - e”)== 0)不是“-e”工作正常。但是当我把它放进去时,我的代码只适用于上面的if语句生成的时候。有关为何会出现这种情况的任何想法例如:
如果我用argv编译[1]没有注释掉:
//示例程序将是可执行文件
exampleProgram -e< a.txt工作但是exampleProgram< a.txt不起作用。有什么想法吗?
答案 0 :(得分:2)
很简单,如果你没有向程序发送任何参数,那么args[1]
就不存在了,你试图访问一个未分配的内存位置。
您可以这样做:
int main(int argc, char *argv[])
{
if(argc > 1 && strcmp(argv[1],"-e")==0)
{
//perform code
}
//code if argv[1] is not "-e"
return 0;
}
答案 1 :(得分:1)
argv是一个数组。当您尝试索引到最后一个元素之外的数组时,您会得到段错误。要不超过最后一个元素,请检查argc的值,而argc - 1将是您可以访问的最后一个元素的索引。有关段错误的更多信息,请访问http://en.wikipedia.org/wiki/Segmentation_fault
答案 2 :(得分:0)
原因
exampleProgram -e < a.txt
有效
exampleProgram < a.txt
没有
是因为当没有参数传递给程序时,其中没有argv[1]
,它超出了args数组的范围。在测试argv[1]
之前你需要做的是测试是否有很多参数可以开始。
例如:
if (argc > 1) {
if(strcmp(argv[1],"-e")==0) {
}
}
argc
用于保存程序中存在多少个参数,以便您可以在超出范围之前对其进行测试。