Пример ниже, у меня есть fn как указатель const, указывающий на постоянную c-строку. Когда я объявляю и назначаю несвязанный другой константный указатель на другую константу c-string, исходный fn изменяется. Я пытался выяснить, почему на какое-то время, но не могу понять, что может это сделать?Почему присвоение несвязанной строки вызывало изменение другой строки?
Выход:
Оригинал сноска: sampleStrWithExtension
Модифицированный сноска: randomStr2ModifiedFn
int main() {
std::string baseString = "sampleStr";
std::string randomBaseString = "randomStr2";
const char* const fn = (baseString + "WithExtension").c_str();
std::cout << "Original fn: " << fn << std::endl;
const char* const variableNotFn = (randomBaseString + "ModifiedFn").c_str();
std::cout << "Modified fn: " << fn << std::endl;
return 0;
}
'fn = (baseString +" WithExtension "). C_str()' не очень простое назначение. Объект 'string', созданный выражением' baseString + 'WithExtension' ', немедленно уничтожается после завершения этого назначения, оставляя переменную' fn', указывающую на нераспределенную память, которая может быть повторно использована в любое время. –
Время жизни 'x.c_str()' никогда не продолжается за время жизни 'x'. – Angew