这里我一定忽略了一个明显的事实--我已经有一段时间没有编写C++了。为什么在将c样式字符串赋给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;
}发布于 2013-01-17 13:28:34
仅当从中获取C字符串的std::string存在时,c_str返回的C字符串才可用。一旦std::string被销毁,C字符串也就消失了。(此时,尝试使用C字符串会产生未定义的行为。)
其他操作也可能使C字符串无效。通常,任何修改字符串的操作都会使c_str返回的指针无效。
发布于 2013-01-17 13:28:36
在从lexical_cast创建的临时string的结果上调用c_str函数。因为不保存,所以字符串在表达式的末尾被销毁,因此访问被销毁字符串的c_str的指针是未定义的行为。
https://stackoverflow.com/questions/14372689
复制相似问题