我一定错过了一个明显的事实 - 一段时间没有编程C ++。为什么我不能在将c-style字符串分配给const char *变量后打印它?但是,如果我尝试直接打印它而不指定它可以正常工作:
#include "boost/lexical_cast.hpp"
using namespace std;
using boost::lexical_cast;
int main (int argc, char** argv)
{
int aa=500;
cout << lexical_cast<string>(aa).c_str() << endl; // prints the string "500" fine
const char* bb = lexical_cast<string>(aa).c_str();
cout << bb << endl; // prints nothing
return EXIT_SUCCESS;
}
答案 0 :(得分:5)
c_str
返回的C字符串仅在获取它的std::string
时可用。一旦std::string
被销毁,C字符串也就消失了。 (此时,尝试使用C String会产生未定义的行为。)
其他操作也可能使C String无效。通常,修改字符串的任何操作都将使c_str
返回的指针无效。
答案 1 :(得分:3)
c_str
创建的临时string
的结果调用 lexical_cast
函数。由于您没有保存它,因此在该表达式的末尾销毁该字符串,因此访问指向已销毁字符串的c_str
的指针是未定义的行为。