2014-01-11 59 views
11

我正在從命令行讀取輸入文件。basic_string :: _ S_construct null無效

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

從另一個文件我使用解析器函數,這是declerated像這樣;

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

我收到錯誤;終止在拋出'std :: logic_error'實例後調用 what():basic_string :: _ S_construct null無效

編程接收到的信號SIGABRT,中止。

我檢索了錯誤。我認爲這是因爲這些原因。但我找不到實際的原因。有誰能夠幫助我?

+3

如果您事先沒有檢查argc> 1,那麼您絕對不能**說'argv [1]'。 –

回答

9

這意味着filenameNULLParser,可能是因爲你沒有傳遞任何參數到你的程序的命令行。

確保始終檢查是否將預期數量的參數傳遞給您的程序。例如,你可以這樣做:

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

可能你忘了指定命令行參數,結果argv [1]等於NULL。你應該檢查用戶是否輸入了命令行參數。例如

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