问题描述
- 关于c++中c_str函数的一些问题
-
1.“c_str返回的是临时指针,不能对其操作”这句话是什么意思,临时指针是像传值一样的拷贝吗,存在于临时栈区的那种
2.一个string被c_str函数作用后会被析构??为什么我自己运行出来不是这样子的,下面附图
解决方案
c_str()
返回的是const char*
指针,所以不能用该指针改变其指向的对象。例如你的string对象是1234,你希望修改成2234,那你是不能用string函数的c_str
返回值来修改它的。- 不是string对象在调用
c_str
后会被析构,而是string对象在其作用期结束的时候被析构(无论是否调用c_str
)。但如果你用c_str
获得了一个指针,而这个指针的作用期比string对象长,那么在string被析构后这个指针还存在,而指针指向的位置已经无效了。这就会出问题。大概是这样:
const char* func(){
string s = "1234";
return s.c_str();
}
这个函数是不正确的,因为在func返回的时候,s会被析构。所以你返回的const char*
指针,指向了一个无效区域。(注意,这个无效区域可能暂时没有被新数据覆盖,所以你在函数返回后立刻访问这个指针对象,不见得会出错,但这个区域迟早会被覆盖的。)
解决方案二:
C++中的c_str函数
c_str()函数
c_str函数
时间: 2024-10-17 22:34:13