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;
}

Я получаю сообщение об ошибке; terminate call после вызова экземпляра 'std:: logic_error' what(): basic_string:: _ S_construct null недействительно

Запрограммированный сигнал SIGABRT, Прервано.

Я искал ошибку. Я думаю, это из-за этих строк. Но я не могу найти настоящую причину. Кто-нибудь может мне помочь?

Ответ 1

Это означает, что filename имеет значение NULL в Parser, возможно, потому, что вы не передаете какие-либо аргументы в свою командную строку программы.

Обязательно проверяйте, будет ли ожидаемое количество аргументов передано вашей программе. Например, вы можете сделать:

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

Ответ 2

Возможно, вы забыли указать аргументы командной строки и в результате argv [1] равен NULL. Вы должны проверить, введен ли пользователь в аргументы командной строки. Например

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