社区
C++ 语言
帖子详情
关于c_str()返回值类型的问题?
FlashMovie
2003-09-12 11:50:57
string s1 = "hello";
const char *str = s1.c_str();
c_str()返回了一个指向常量数组的指针,C++为什么让c_str()返回一个指向常量数组的指针,而不是返回一个指向数组的指针?
请高手指点,谢谢!
...全文
168
2
打赏
收藏
关于c_str()返回值类型的问题?
string s1 = "hello"; const char *str = s1.c_str(); c_str()返回了一个指向常量数组的指针,C++为什么让c_str()返回一个指向常量数组的指针,而不是返回一个指向数组的指针? 请高手指点,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
晨星
2003-09-13
打赏
举报
回复
如果返回一个指向数组的指针,那么你就可以直接操作string中保存内容的字符缓冲,也就绕过了string的共用接口,这不符合面向对象中“封装”的理念。
事实上,使用强制转换,是可以达到目的的。但不要忘记这还不仅仅是个“理念”的问题,还可能产生许多具体的问题,请楼主比较一下程序中前后两段的结果的不同,并想想为什么?^_^
#include <iostream>
#include <string>
using namespace std;
void main()
{
string s1 = "abcdefg";
s1 = s1.substr(0 , 3);
cout << s1 << " " << s1.size() << endl;
string s2 = "abcdefg";
char * p = (char *)s2.c_str();
p[3] = '\0';
cout << s2 << " " << s2.size() << endl;
}
============================================================
由此可见,既然是面向对象,当然应该通过类的共用接口来操纵对象。
robbie24
2003-09-13
打赏
举报
回复
要回答这个问题,你先想想class的信息隐藏机制是为了什么?
若是如此的方式能够编译通过:
char *str=s1.c_str();
那么,对于class的设计者来说,将低层的那个指向动态分配所的的指针变量放在private或者protected域中对其进行信息保护/隐藏的目的将遭受挫败.
一个简单的str指针变量将与对象s1的低层指针指向同块内存.而更加可怕的事情是,它没有const修饰,那么一旦拥有了它,就意味着你可以饶过string class所设计的'重重保护',对那块可怜的内存为所欲为.
这个就是所谓的'存取晋级'.
如果你正在阅读C++ Primer 的话,那么书上关于这个问题是有描述的.
给你的忠告就是没事别胡乱传会一个低层数据成员的handle.
JavaScript中常用的六种互动方法示例
作用:通常用于提醒用户做出某些选择,其
返回值
为布尔
类型
,点击确定
返回值
为ture,点击取消
返回值
为false 例如: 代码如下: [removed] var mymessage=confirm(“你喜欢JavaScript吗?”); if(mymessage...
str
ing中c_
str
()用法总结
c_
str
函数的
返回值
是const char的,不能直接赋值给char*,所以就需要我们进行相应的操作转化。 //标准库的
str
ing类提供了三个成员函数来从一个
str
ing得到c
类型
的字符数组 //主要介绍c_
str
//...
基于Web的酒店客房管理系统的设计与实现+论文+开题
}
Str
ing
str
= "{\"status\":\"" + status + "\",\"msg\":\"" + msg + "\"}"; ResponseEntity<
Str
ing> responseEntity = new ResponseEntity<
Str
ing>(
str
, initHttpHeaders(), HttpStatus.OK); return...
str
ing中c_
str
()的用法
这是为了与c语言兼容,在c语言中没有
str
ing
类型
,故必须通过
str
ing类对象的成员函数c_
str
()把
str
ing 对象转换成c中的字符串样式。 注意:一定要使用
str
cpy()函数 等来操作方法c_
str
()返回的指针。 比如:...
str
ing中c_
str
()
str
cpy()函数讲解
这是为了与c语言兼容,在c语言中没有
str
ing
类型
,故必须通过
str
ing类对象的成员函数c_
str
()把
str
ing 对象转换成c中的字符串样式。 注意:一定要使用
str
cpy()函数 等来操作方法c_
str
()返回的指针。 1.2.应用 比如:...
C++ 语言
64,644
社区成员
250,475
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章