использование строки для передачи имени файла в fstream

Я использую следующий метод для чтения txt файла

modelStream.open("file.txt", ios::in);
if (modelStream.fail())
    exit(1);
model = new Model(modelStream);

но я хочу знать, как я могу передать строку в качестве параметра

string STRING;
modelStream.open(STRING, ios::in);
if (modelStream.fail())
    exit(1);
model = new Model(modelStream);

Кто-нибудь знает, возможно ли это, и если да, то как мне это сделать?


person Alan Fletcher    schedule 26.10.2012    source источник


Ответы (3)


По устаревшим причинам iostreams в C++03 ожидает в качестве аргумента строку в стиле C, заканчивающуюся нулем, и не понимает std::string. К счастью, std::string может создать строку в стиле C, заканчивающуюся нулем, с помощью функции std::string::c_str():

modelStream.open(STRING.c_str(), ios::in);

На самом деле это было «исправлено» в С++ 11, поэтому, если бы вы использовали его, ваш исходный код был бы функциональным.

Кроме того, не рекомендуется использовать имя переменной с заглавными буквами; также не является переменной с именем «строка». Сделайте так, чтобы имя описывало значение.

person Lightness Races in Orbit    schedule 26.10.2012

Просто используйте c_str () метод std::string

modelStream.open(STRING.c_str (), ios::in);

person tozka    schedule 26.10.2012

стандартные потоки не принимают стандартную строку, только c-строку! Итак, передайте строку с помощью c_str():

modelStream.open(STRING.c_str(), ios::in);
person Zoran Marjanovic    schedule 26.10.2012