У меня есть проблема, которую я не могу решить самостоятельно.
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, поэтому строки должны быть равны. У кого-нибудь есть идея, что я делаю не так?
Срок действия вывода c_str()
ограничено, самое большее, временем жизни объекта, на котором c_str()
назывался.1
Я подозреваю что this->IOPaths.rawData
указывает на освобожденную память один раз filenameRaw
выходит за рамки
Адекватным средством было бы передать std :: string, а не [const] char*
, Хорошая реализация stl будет использовать семантику копирования при записи для строкового класса, поэтому, возможно, вы не будете повторно копировать строковые данные.
1В некоторых случаях (например, если объект изменен), он может быть меньше.
Других решений пока нет …