看下面的英文解释:

const char* c_str ( ) const;
Get C string equivalent
Generates a null-terminated sequence of characters (c-string) with the same content as the string object and returns it as a pointer to an array of characters.
A terminating null character is automatically appended.

const char* data() const;
Get string data
Returns a pointer to an array of characters with the same content as the string.
Notice that no terminating null character is appended (see member c_str for such a functionality).

第一点:c_str()字符串后有'\0',而data()没有。
第二点: data 返回的数组(虽然是char* 但是和  c_str 还是有本质区别的)-----data 能解决一个问题 string 串中 包含 \0 情况的问题。结合size 方法就能随意访问返回的数据了.  注意他返回的是array 数组.

中间带\0结束符的string对象

有多种方法可实现中间带结束符\0的string对象初始化。但是像:

string s="123 \0 123";
s5="abc\0";
s5+="def\0";

这样的初始化方法都是不行的,因为编译器或运行时默认都会截掉结束符后面的字符串。结果就是:

s="123 "

s5="abcdef"

1、构造法初始化

string s5= string("12345 \0 54321", 13);

这样的方式初始化,这时 s5="12345 \0 54321"

2、append函数添加

除了上面方法,还可以使用append函数,代码如下:

s5.append("abc\0",4);
s5.append("def\0",4);

知道怎么构造,知道怎么解析,string char* 相关处理也就清晰了。

相关参考资料:
  http://www.metsky.com/archives/582.html

  http://oss.org.cn/html/32/n-3732.html

转载于:https://www.cnblogs.com/porter/p/3830190.html

c++ string c_str() 和data()区别相关推荐

  1. string中c_str()、data()、copy(p,n)函数的用法

    转载:http://www.cnblogs.com/qlwy/archive/2012/03/25/2416937.html 标准库的string类提供了3个成员函数来从一个string得到c类型的字 ...

  2. CString与string、char*的区别和转换

    我们在C++的开发中经常会碰到string.char*以及CString,这三种都表示字符串类型,有很多相似又不同的地方,常常让人混淆.下面详细介绍这三者的区别.联系和转换: 各自的区别 char*: ...

  3. string 与char *的区别

    string是STL当中的一个容器,对其进行了封装,所以操作起来非常方便. char *是一个指针,可以指向一个字符串数组,至于这个数组可以在栈上分配,也可以在堆上分配,堆得话就要你手动释放了. st ...

  4. String与StringBuffer的区别

    String与StringBuffer的区别 简单地说,就是一个变量和常量的关系.StringBuffer对象的内容可以修改:而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象. St ...

  5. String,StringBuffer和StringBuilder区别?

    String是字符串常量,final修饰;StringBuffer字符串变量(线程安全);StringBuilder 字符串变量(线程不安全).此外StringBuilder和StringBuffer ...

  6. JAVA中String与StringBuffer的区别

    String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...

  7. String和StringBuffer的区别,String长度是固定的?

    String和StringBuffer的区别,String长度是固定的? 区别: 1. String类字符串的长度是固定的,StringBuffer类字符串的长度是可变的.因为String改变的是地址 ...

  8. C++string类型与C语言字符数组的转换 std::string.c_str()函数

    语法: const char *c_str();搜索 c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过 ...

  9. Java中string与String区别_JAVA中String与StringBuffer的区别

    JAVA中String与StringBuffer的区别 2009-12-3文字大小:大中小 在java中有3个类来负责字符的操作. 1.Character 是执行 单个字符操作的, 2.String ...

最新文章

  1. NVIDIA Nsight Systems CUDA 跟踪
  2. java播放器使用教程_java 实现音乐播放器的简单实例
  3. 优秀的词云展示第三方库——wordcloud
  4. 输出9*9口诀python-Python输出9*9乘法表的方法
  5. xamarin使用mysql_[开源] .NetCore .NetFramework Xamarin 使用 ORM FreeSql 访问 MySql
  6. python 子线程coredump_python多线程备份mysql数据工具:mysqlpdump使用方法
  7. 【转】30种MySQL索引优化的方法
  8. php怎么把日期加时间,将小时分钟添加到日期时间 - php
  9. 【华为云技术分享】【昇腾】ModelArts与Atlas 200 DK云端协同开发——行人检测Demo(提供完整Demo)
  10. int sel 在c语言表示,C语言教程ch1初识C程序.ppt
  11. 边缘独立(marginal independent)的理解及举例
  12. python代码解读器_python文章生成器(附源码+讲解)
  13. jQuery中animate()的方法以及$(body).animate({scrollTop:top})不被Firefox支持问题的解决...
  14. [转]人像识别是个伪命题
  15. 绿坝 图像过滤比对算法有感
  16. iOS 修改系统定位(非越狱)
  17. 微信公众号推文封面图设置
  18. [乐意黎转载]“多情自古空余恨”的下句是什么?
  19. 天善智能网络爬虫学习~
  20. Rman 在非归档模式增量備份

热门文章

  1. 一个普通摄像头就让二次元老婆“活”了过来,网友:求收费
  2. 71岁的亿万富翁坐自家飞船成功游览太空!此前已为太空旅行砸了超10亿美元
  3. 清华姚班的科研能力,能孵化出一家怎样的公司?
  4. 不同数据库中查询前几条记录的用法(SQL Server/Oracle/Postgresql)
  5. java的list类
  6. JdbcTemplate(1)(数据连接池)
  7. web人力资源信息系统开发日志②
  8. 在sql server中建存储过程,如果需要参数是一个可变集合怎么处理?
  9. mac下完全卸载postgresql的方法
  10. WPF学习笔记——设置ListBox选中项的背景颜色