请解释以下程序的输出

时间:2017-12-04 05:34:09

标签: c++ c-str

只需运行此程序并向我解释最后一行的输出,为什么它打印“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;
}

1 个答案:

答案 0 :(得分:0)

这是因为你依赖于“f()。c_str()”生成的临时值。在未来对char数组的调用中,值集不会被扩展,即s变为包含垃圾,因为它已经变成了悬空。 此外,它不一定要打印'g'。