我得到了以下程序:
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
我一直在抓头发几个小时,但仍然没有弄清楚出了什么问题。
答案 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
的字符串在访问指针时仍在范围内。