我正在从命令行读取输入文件。
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,已中止。
我找错了。我认为这是因为这些线条。但我找不到实际的原因。有谁能够帮助我?
这意味着 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);
// ...
}
您可能忘记指定命令行参数,因此结果argv [1]等于NULL。您应该检查用户是否输入了命令行参数。例如
int main(int argc, char **argv)
{
Scene myScene;
string filename;
if ( 1 < argc ) filename.assign( argv[1] );