argv[1] 给出段错误



我有以下代码:

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用于保存程序中存在多少参数,以便您可以在越界之前对其进行测试。

相关内容

  • 没有找到相关文章

最新更新