Присвоение c_str() строке

У меня есть проблема, которую я не могу решить самостоятельно.

string filenameRaw;
filenameRaw= argv[1];
function(filenameRaw.c_str(),...);

function(const char* rawDataFile,const char* targetfieldFile,const char* resultFile,const char* filename)
...
this->IOPaths.rawData=rawDataFile;
...

пока работает очень хорошо. Теперь я пытаюсь поместить другую строку в переменную IOPaths.rawData...

function(const char* rawDataFile,const char* targetfieldFile,const char* resultFile,const char* filename)
...
string filenameRaw;
filenameRaw=reader.Get("paths", "rawData", "UNKNOWN")
...
const char* rawDataFile1=filenameRaw.c_str();
cout << "Compare: " << strcmp(rawDataFile,rawDataFile1) <<endl;
...
this->IOPaths.rawData=rawDataFile1;

это больше не работает. Позже в моей программе я получаю ошибки с именем файла. Strcmp определенно дает 0, поэтому строки должны быть равны. У кого-нибудь есть идеи, что я делаю не так?

1 ответ

Решение

Срок действия вывода c_str() ограничено, самое большее, временем жизни объекта, на котором c_str() назывался. 1

Я подозреваю что this->IOPaths.rawData указывает на освобожденную память один раз filenameRaw выходит за рамки

Адекватным средством было бы передать std::string, а не [const] char*, Хорошая реализация stl будет использовать семантику копирования при записи для строкового класса, поэтому, возможно, вы не будете повторно копировать строковые данные.


1 В некоторых случаях (например, если объект изменен), он может быть меньше.

Другие вопросы по тегам