免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1029 | 回复: 3
打印 上一主题 下一主题

大家来看看这段代码吧, 迷惑中... [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-01-05 12:56 |只看该作者 |倒序浏览
string str = "abcdeeeee";
char* c = (char*)str.c_str(); //??
cout << "c: " << c << endl; // step 1
str.append(10, '!');
cout << "str: " << str << endl;
cout << "c: " << c << endl; // c is same with the c of step 1

string类的方法c_str()返回一个const char*指针, 我将它赋给了c, 但是c究竟指向了哪里
?

迷惑中!!!

哪位帮我看一看, 多谢了!!!!!

论坛徽章:
0
2 [报告]
发表于 2005-01-05 13:45 |只看该作者

大家来看看这段代码吧, 迷惑中...

c指向了另外的地方,应该是malloc来的空间,打印一下看看就知道了。

论坛徽章:
0
3 [报告]
发表于 2005-01-05 14:18 |只看该作者

大家来看看这段代码吧, 迷惑中...

string str = "abcdeeeee";
//string的operator=会为str分配内存
//这个和char *str="abcdeeeee"; 不一样,这是个指向的是常量
char* c = (char*)str.c_str(); //??
cout << "c: " << c << endl; // step 1
//这里两个内容一样,因为应该是同一个内存地址
str.append(10, '!'); //这个操作因为增加了长度,应该重新申请空间,str里面字符串的地址一般会改变
cout << "str: " << str << endl;
cout << "c: " << c << endl; // c is same with the c of step 1
//这时候原来c指针指向的内存应该被free或者delete的了,幸运的是里面的内容并没有被改变,所以可以输出来

论坛徽章:
0
4 [报告]
发表于 2005-01-05 14:33 |只看该作者

大家来看看这段代码吧, 迷惑中...

谢谢指点,呵呵,果然我就是把string当成s(“abcdef”)常量来看了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP