首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++常量char*指针赋值

C++常量char*指针赋值
EN

Stack Overflow用户
提问于 2013-01-17 13:25:30
回答 2查看 786关注 0票数 1

这里我一定忽略了一个明显的事实--我已经有一段时间没有编写C++了。为什么在将c样式字符串赋给const char*变量后不能打印它?但是,如果我尝试直接打印它,而不指定它,则可以正常工作:

代码语言:javascript
复制
#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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-17 13:28:34

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

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

票数 5
EN

Stack Overflow用户

发布于 2013-01-17 13:28:36

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14372689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档