Пожалуйста, объясните вывод программы ниже

Просто запустите эту программу и объясните вывод последней строки, почему она печатает "g" вместо "f". Здесь мое намерение состоит в том, чтобы узнать, почему он показывает возвращаемое значение предыдущих функций?

#include <iostream>
#include <string>

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;
}

person intiyaz ahammad shaik    schedule 04.12.2017    source источник
comment
Вывод c_str() становится недействительным при каждом вызове. Вы не должны полагаться на предыдущее значение независимо от того, для какой переменной вы его используете.   -  person user2525536    schedule 04.12.2017


Ответы (1)


Это связано с тем, что вы полагаетесь на временное значение, сгенерированное "f().c_str()". Набор значений не расширяется в будущих вызовах вашего массива символов, т.е. скорее содержит мусор, поскольку он стал оборванным. Более того, он не обязательно всегда печатает «g».

person Valgrind1691    schedule 04.12.2017