我有以下代码:
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 语句产生 true 的情况。关于为什么会发生这种情况的任何想法?例如:
如果我使用 argv[1] 编译,则未注释掉:
示例程序将是一个可执行文件
示例程序 -e
,如果你不向程序发送任何参数,那么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;
}
argv 是一个数组。当您尝试索引到最后一个元素之外的数组时,会出现段错误。要不要超过最后一个元素,请检查 argc 的值,argc - 1 将是您可以访问的最后一个元素的索引。有关段错误的更多信息:http://en.wikipedia.org/wiki/Segmentation_fault
原因
exampleProgram -e < a.txt
作品和 exampleProgram < a.txt
没有
是因为当没有参数传入程序时,哪里没有argv[1]
,哪里就超出了 args 数组的范围。在测试argv[1]
之前,您需要做的是测试以查看是否有那么多参数可以开始。
例如:
if (argc > 1) {
if(strcmp(argv[1],"-e")==0) {
}
}
argc
用于保存程序中存在多少参数,以便您可以在越界之前对其进行测试。