присвоение 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В некоторых случаях (например, если объект изменен), он может быть меньше.

3

Другие решения

Других решений пока нет …