c++ const char*指针赋值
C++ const char* pointer assignment
我一定错过了一个明显的事实——我有一段时间没有编程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
指针是未定义的行为。
相关文章:
- 错误:在为指针赋值时,void值没有被忽略
- 关于 c++ 函数中指针赋值的简单问题
- 链表指针赋值为什么我们不能直接将尾巴分配给 temp 而不是尾巴>尾巴下一个
- 为什么通过指针赋值常量没有效果?
- 复制构造函数中的指针赋值
- C++ 指针赋值运算符重载(不仅是对象赋值,还有指针赋值)
- 从字符串数组打印其中一个字符串时出现空指针赋值错误
- 为字符串指针赋值
- 动态指针赋值c++
- std::wstring指针赋值C++
- C++匿名结构指针赋值
- 为指针赋值而不赋值
- 此指针赋值应生成段错误
- 指向指针赋值的指针
- 哪个指针赋值更好(C++)
- <T>unique_ptr.get() 方法在使用原始指针赋值时调用析构函数?
- 为用soap_alloc创建的std::string指针赋值
- 为什么函数头的更改会导致指针赋值不起作用
- 64位c++指针赋值
- 在函数中将指针赋值到不同的地址