C ++ c_str()奇怪的行为

时间:2014-09-04 06:25:49

标签: c++

我得到了以下程序:

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总是打印出“f”,但以下是我得到的:

s = f
g() = g
s = g

我一直在抓头发几个小时,但仍然没有弄清楚出了什么问题。

1 个答案:

答案 0 :(得分:2)

您的指针s在打印时无效,因为调用std:string的临时f()在此时被销毁(销毁发生在您和您的main函数第一行的完全表达式。

试试这个:

int main() {
  std::string f_string = f();
  const char *s = f_string.c_str();
  std::cout << "s = " << s << std::endl;
  std::cout << "g() = " << g() << std::endl;
  std::cout << "s = " << s << std::endl;
}

现在它应该作为调用c_str的字符串在访问指针时仍在范围内。