1

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

2 回答 2

5

由返回的 C 字符串c_str仅在std::string从中获取它的存在时可用。一旦它std::string被破坏,C 字符串也消失了。(此时,尝试使用 C 字符串会产生未定义的行为。)

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

于 2013-01-17T05:28:33.813 回答
3

c_str函数string在从lexical_cast. 由于您不保存它,因此该字符串在该表达式的末尾被销毁,因此访问指向c_str已销毁字符串的指针是未定义的行为。

于 2013-01-17T05:28:36.010 回答