社区
C++ 语言
帖子详情
关于c_str()返回值类型的问题?
FlashMovie
2003-09-12 11:50:57
string s1 = "hello";
const char *str = s1.c_str();
c_str()返回了一个指向常量数组的指针,C++为什么让c_str()返回一个指向常量数组的指针,而不是返回一个指向数组的指针?
请高手指点,谢谢!
...全文
273
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.
使用Ctypes进行python和C++
str
ings
类型
返回值
交互遇到的
问题
以及隐藏bug解决
使用ctypes进行python和C++
str
ings
类型
返回值
交互遇到的
问题
以及隐藏bug
str
ing中c_
str
()的用法
1. 语法: 1 const char *c_
str
(); c_
str
()函数返回一个指向正规C字符串的指针常量, 内容与本
str
ing串相同。 这是为了与c语言兼容,在c语言中没有
str
ing
类型
,故必须通过
str
ing类对象的成员函数c_
str
()把
str
ing 对象转换成c中的字符串样式。 注意:一定要使用
str
cpy()函数 等来操作方法c_
str
()返回的指针。 比如:...
c_
str
()函数
问题
c_
str
()函数用于
str
ing与const char*之间的转换,也经常能用到,下面的例子你说输出啥? #include <io
str
eam> #include <
str
ing> using namespace std; int main() {
str
ing s = "Alexia"; const char *
str
...
c++中的c_
str
()用法
1.标准库中的
str
ing类提供了3个成员函数来从一个
str
ing得到c
类型
的字符数组: c_
str
() data() copy(p,n) 2.c_
str
()是Borland封装的
Str
ing类中的一个函数,它返回当前字符串的首字符地址。换种说法,c_
str
()函数返回一个指向正规C字符串的指针常量,内容与本
str
ing串相同。这是为了与C语言兼容,在C语言中没有
str
ing
类型
,故必须通过s...
C++中的c_
str
()函数用法
语法: const char *c_
str
(); c_
str
()函数返回一个指向正规C字符串的指针常量, 内容与本
str
ing串相同. 这是为了与c语言兼容,在c语言中没有
str
ing
类型
,故必须通过
str
ing类对象的成员函数c_
str
()把
str
ing 对象转换成c中的字符串样式。 1.c_
str
是一个内容为字符串指向字符数组的临时指针; 2.c_
str
返回的是一个可读不可改的常指...
C++ 语言
65,214
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章