basic_string :: _ S_construct null无效

时间:2014-01-11 22:35:22

标签: c++

我正在从命令行读取输入文件。

int main(int argc, char **argv)
{
    Scene myScene;
string filename = argv[1];
myScene = Parser(filename);
 ...
}
从另一个文件

我使用解析器函数,这个函数就像这样;

Scene Parser(string filename)
{
 string line;
 ifstream myfile (filename.c_str());
 ...
 return scene;
}

我收到了错误;在抛出'std :: logic_error'的实例后终止调用   what():basic_string :: _ S_construct null无效

编程接收信号SIGABRT,已中止。

我搜索了错误。我认为这是因为这些路线。但我找不到实际的原因。有人能帮助我吗?

2 个答案:

答案 0 :(得分:10)

这意味着filename中的Parser NULL ,可能是因为您没有将任何参数传递给程序的命令行。

确保始终检查预期的参数数量是否传递给您的程序。例如,您可以这样做:

int main(int argc, char *argv[]) {
   if (argc != NUMBER_OF_EXPECTED_ARGUMENTS) {
      exit(EXIT_FAILURE);
   }
   // ...
   string filename(argv[1]);
   Scene myScene = Parser(filename);
   // ...
}

答案 1 :(得分:5)

您可能忘记指定命令行参数,因此结果argv [1]等于NULL。您应该检查用户是否输入了命令行参数。例如

int main(int argc, char **argv)
{
    Scene myScene;
    string filename;
    if ( 1 < argc ) filename.assign( argv[1] );