C++中string.c_str()函数的一些疑问,寻求高手帮忙

FZNPLY FZNPLY 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
测试源码如下:

#include <iostream>
#include <string>

#include <cstdio>
#include <cstring>

using namespace std;

void myFunction(const char *p_ch)
{
string str("Function");
printf("函数里面,字符串为: %s\n", str.c_str());
p_ch = str.c_str();
}

int main()
{
const char * const_pcstr_t;

myFunction(const_pcstr_t);
printf("函数外面,字符串为: %s\n", const_pcstr_t);


{
string str("Block");
printf("块作用域里面,字符串为: %s\n", str.c_str());
const_pcstr_t = str.c_str();
}
printf("块作用域外面,字符串为: %s\n", const_pcstr_t);


char* pcstr_t = NULL;

try
{
pcstr_t = new char[10];
}
catch(bad_alloc)
{
cout<< "执行new 操作,分配空间失败."<< endl;
return 1;
}
strcpy(pcstr_t , "Heap");
printf("堆空间删除之前,字符串为: %s\n", pcstr_t);

delete [] pcstr_t;
printf("堆空间删除之后,字符串为: %s\n", pcstr_t);


int i_t = 0;//查看地址可以知道,字符串是存放在堆上,i_t存放在栈上
printf("堆中分配的地址:%x, string内部返回的地址:%x, 局部变量(栈上分配的)地址:%x\n",
reinterpret_cast<unsigned int>(pcstr_t),
reinterpret_cast<unsigned int>(const_pcstr_t),
reinterpret_cast<unsigned int>(&i_t)
);

return 0;
}


g++编译后程序输出如下:

函数里面,字符串为: Function
函数外面,字符串为: U��WVS�O
块作用域里面,字符串为: Block
块作用域外面,字符串为: Block
堆空间删除之前,字符串为: Heap
堆空间删除之后,字符串为:
堆中分配的地址:97c2040, string内部返回的地址:97c2034, 局部变量(栈上分配的)地址:bf9d4b8c
...全文

相关推荐

c++中string类成员函数c_str()的用法

c_str()函数返回一个指向正规c字符串的指针,内容和string类的本身对象是一样的,通过string类的c_str()函数能够把string对象转换成c中的字符串的样式

weixin_38626075

C++string中的insert()插入函数详解

主要介绍了C++string中的insert()插入函数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

weixin_38501916

c++中c_str()的用法示例

//标准库的string类提供了三个成员函数来从一个string得到c类型的字符数组 //主要介绍c_str //c_str():生成一个const char*指针,指向以空字符终止的数组。 //这个数组应该是string类内部的数组 #include //需要包含cstring的字符串 #include using namespace std; int main() { //string--&gt;char* //c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同 //这个数组的数据是临时的,当有一个改变这些数据的成员函数

weixin_38638004

string中c_str(),data(),copy(p,n)函数的用法总结

以下是对string中c_str(),data(),copy(p,n)函数的用法进行了详细的介绍,需要的朋友可以过来参考下

weixin_38678057

c_str()的用法详细解析

c_str()就是把string类对象转换成和c兼容的char *类型。这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式

weixin_38720461
评论 26
收藏 已收藏
分享
返回顶部
FZNPLY
C++ 语言 65,214 成员 250,514 内容