社区
C++ 语言
帖子详情
关于c_str()返回值类型的问题?
FlashMovie
2003-09-12 11:50:57
string s1 = "hello";
const char *str = s1.c_str();
c_str()返回了一个指向常量数组的指针,C++为什么让c_str()返回一个指向常量数组的指针,而不是返回一个指向数组的指针?
请高手指点,谢谢!
...全文
170
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中常用的六种互动方法示例
1.confirm消息对话框 语法:confirm(”str“); 参数说明:str为对话框中要显示的文本, 作用:通常用于提醒用户做出某些选择,其
返回
值
为布尔
类型
,点击确定
返回
值
为ture,点击取消
返回
值
为false 例如: 代码如下: [removed] var mymessage=confirm(“你喜欢JavaScript吗?”); if(mymessage==true) { [removed](“很好,加油!”); } else { [removed](“JS功能强大,
string中
c_str
()用法总结
c_str
()函数用于string与const char之间的转换; string.
c_str
是Borland封装的String类中的一个函数,它
返回
当前字符串的首字符地址;
c_str
函数的
返回
值
是const char的,不能直接赋
值
给char*,所以就需要我们进行相应的操作转化。 //标准库的string类提供了三个成员函数来从一个string得到c
类型
的字符数组 //主要介绍
c_str
//...
string中
c_str
()的用法
1. 语法: 1 const char *
c_str
();
c_str
()函数
返回
一个指向正规C字符串的指针常量, 内容与本string串相同。 这是为了与c语言兼容,在c语言中没有string
类型
,故必须通过string类对象的成员函数
c_str
()把string 对象转换成c中的字符串样式。 注意:一定要使用strcpy()函数 等来操作方法
c_str
()
返回
的指针。 比如:...
c++ string
c_str
()
char* c; string s="1234"; c = s.
c_str
(); 1:
c_str
函数的
返回
值
是const char*的,不能直接赋
值
给char* ,所以就需要我们进行相应的操作转化(利用strcpy()函数),或用const char *ch试试 2://c最后指向的内容是垃圾,因为s对象被析构,其内容被处理(纠正:s对象的析构是在对指针c完成赋操作之后进行的,故此处并没有
string中
c_str
() strcpy()函数讲解
1.
c_str
()的语法 语法/原型: const char *
c_str
()
c_str
()函数
返回
一个指向正规C字符串的指针常量,内容与本string串相同。这是为了与c语言兼容,在c语言中没有string
类型
,故必须通过string类对象的成员函数
c_str
()把string 对象转换成c中的字符串样式。 注意:一定要使用strcpy()函数 等来操作方法
c_str
()
返回
的指针。 1.2.应用 比如:最好不要这样: char* c; 2 string s="1234"; 3 c = s.
C++ 语言
64,680
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章