basic_string :: _ S_construct null无效

sta*_*tar 11 c++

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

int main(int argc, char **argv)
{
    Scene myScene;
string filename = argv[1];
myScene = Parser(filename);
 ...
}
Run Code Online (Sandbox Code Playgroud)

从另一个文件中我使用解析器函数,这个函数就像这样;

Scene Parser(string filename)
{
 string line;
 ifstream myfile (filename.c_str());
 ...
 return scene;
}
Run Code Online (Sandbox Code Playgroud)

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

程序接收信号SIGABRT,已中止.

我搜索了错误.我认为这是因为这些方面.但我找不到实际的原因.有谁能够帮我?

Hal*_*oum 10

这意味着filenameParser,可能是因为你没有传递任何参数到你的程序的命令行.

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

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


Vla*_*cow 5

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

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