问题 basic_string :: _ S_construct null无效


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

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,已中止。

我找错了。我认为这是因为这些线条。但我找不到实际的原因。有谁能够帮助我?


5117
2018-01-11 22:35


起源

你必须 决不 说 argv[1] 如果你不检查 argc > 1 预先。 - Kerrek SB


答案:


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

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

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

9
2018-01-11 22:41





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

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

5
2018-01-11 22:43