string系列:2 字符串string声明和string初始化

1710 人浏览 | 时间: 2015-06-23 14:59:34 | 作者: codexia

    string类使用需要包含string头文件,如#include<string>。
    1.默认声明初始化

string defstr;

     这样就声明并初始化了一个默认的空string对象。通过defstr.data()可以返回对象内部字符数组的常量指针。

    使用如:

const char * pconstchar = defstr.data();

    不能通过pconstchar 修改内部的字符数组,因为是常量指针,这样的指针不具有修改变量值的特性,因此可以保护内部的数据不会被修改。如果有特殊需求,可以将常量指针转化成变量指针来操作数据,如

char * p = (char*)pstr;

     除非你很清楚内部原理,否则不建议这么做,这样会导致问题,下面就来讨论会引起的问题。
    默认构造函数实例化的string,在内部分配了一块初始大小的内存,大小不确定,可以通过defstr.capacity()来获得,以元素数来确定大小。如果返回的是15,表明这一块内存可以存放15个字符。这是表明的这块内存的容量。如果超出,会重新分配内存以容纳更多的字符。容量不表示字符数,要获取字符数,通过defstr.size()获取。如果给defstr赋值,则会自动扩大size的大小,只要不超出大小就不会引起分配。如果字符填满了这块内存,C++就会自动扩展大小,因此你不用担心会有不够装。但是这里需要注意一个问题,正式因为会重新分配内存,可能会在后续的内存块分配(紧接着的内存块可以用)或者再另外一个地方分配一个内存块,因此返回的内部字符数组的地址就发生变化了。这个时候就不能使用之前的指针访问新分配后的内存地址。所以前面说的不建议转换为变量指针去修改就是这个原因。因为默认构造函数创建的是空字符串,它保证了第一个元素是可用的,对第一个元素操作还不会引起内存重分配,而如

请微信扫码阅读。
为防止恶意爬虫,
已开启反爬机制,
理解哟~~~~
标注
评论
站内搜
百度搜
传送到手机
手机扫码,识别文字,完成传送x
加载中...
标注内容x
加载中...
添加标注x
收藏 0 点赞 0

相关阅读