C ++ const char *指针赋值

时间:2013-01-17 05:25:30

标签: c++ boost

我一定错过了一个明显的事实 - 一段时间没有编程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;
}

2 个答案:

答案 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的指针是未定义的行为。