c++ const char*指针赋值

C++ const char* pointer assignment

本文关键字:指针 赋值 char const c++      更新时间:2023-10-16

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

c_str返回的C字符串只有在获得它的std::string存在时才可用。一旦std::string被摧毁,C弦也消失了。(此时,尝试使用C String会产生未定义的行为。)

其他操作也可能使C字符串无效。一般来说,任何修改字符串的操作都会使c_str返回的指针无效。

c_str函数在从lexical_cast创建的临时string的结果上被调用。由于不保存它,字符串在该表达式的末尾被销毁,因此访问已被销毁的字符串的c_str指针是未定义的行为。