我正在从命令行读取输入文件。
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,已中止。
我搜索了错误。我认为这是因为这些路线。但我找不到实际的原因。有人能帮助我吗?
答案 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] );