я получил следующую программу:C++ c_str() странное поведение
std::string f() {
return "f";
}
std::string g() {
return "g";
}
int main() {
const char *s = f().c_str();
std::cout << "s = " << s << std::endl;
std::cout << "g() = " << g() << std::endl;
std::cout << "s = " << s << std::endl;
}
Я бы ожидать, чтобы увидеть s всегда распечатать "е", но следующее, что я получаю:
s = f
g() = g
s = g
Я часами почесываю волосы, но до сих пор не понял, что происходит.
Ваш указатель '' 'не указывает на действительный объект к моменту его попытки использовать, поскольку он указывает на данные временного строкового объекта, который не проживает достаточно долго. Вы вызываете * неопределенное поведение *. – juanchopanza
+1 для обновления ПО после 3 дней позже, чтобы уточнить, что он/она не лысый –