【问题标题】:Why is my command line argument handling crashing my program?为什么我的命令行参数处理会使我的程序崩溃?
【发布时间】:2013-04-06 07:36:17
【问题描述】:

为什么看似简单的事情却让我的程序崩溃?

我正在尝试获取n 的值以使数组的大小为N 并对其执行各种操作,但这不是重点。无论如何,每次我尝试访问 argv[1] 时它都会崩溃。

int main(int argc, char * argv[])
{
  int n;
  n = atoi(argv[1]); //Crashes here!
  cout << "\nN: " << n << endl;
}

【问题讨论】:

  • 你一定没有给出论据。
  • 你给出了什么样的论据,你得到了什么样的崩溃?
  • 顺便说一句,如果您计划使用Type arr[n];,那不是标准的 C++。正确的解决方案是 std::vector 或类似的,在这种情况下,我不会真正将其称为数组。
  • 我得到了调试断言失败的数组!nptr != NULL

标签: c++ command-line-arguments argv


【解决方案1】:

argv[1] 存在吗?为了防止您的代码访问内存,它不应该检查传递了多少参数。

if(argc >= 2)
  n = argv[1];
else
  std::cout << "Proper usage: .....\n";

这似乎是学习如何使用调试器查看 argv 和 argc 内容的好时机。

【讨论】:

  • 我如何“给出”一个论点?我认为 arc 和 argv[] 是参数?
  • argv 包含您在执行程序时传递给程序的参数。如果您从命令行运行程序,您将键入以下“myprogram firstargument secondargument”。你曾经在命令提示符下使用过命令 cd 吗?如果是这样,您可能键入了 cd directoryname 以移动到 directoryname 目录。在这种情况下,directoryname 是 cd 程序可以访问的参数。
  • 好的,我明白了。如何给它一个论点?
  • 取决于您的操作系统或 IDE。尝试搜索 IDE 的名称以及如何传递命令行参数。
猜你喜欢
  • 2013-01-02
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 2014-06-27
  • 1970-01-01
相关资源
最近更新 更多