关于string类对象不是以空字符标记字符串末尾的探究

来源:互联网 发布:齐白石闲章知乎 编辑:程序博客网 时间:2024/06/05 20:35
《C++ Primer Plus》第五版中提到,不同于C-风格字符串,string类对象不使用空字符来标记字符串末尾。由此,进行了探究。纯属个人见解,请大家指正。
1、空字符为ASCII值为0的字符,即‘\0’,为此,编写以下代码测试(vs2010)
char chtemp[20] = { 'a', 'd', '\0', 'm'};
char chnul = chtemp[2];
cout<<chnul<<"为空字符"<<endl;
cout<<chtemp<<endl;


string strtemp = chtemp;
cout<<strtemp<<endl;


string strNull = "asdf";
cout<<strNull<<endl;
strNull[2] = '\0';
cout<<strNull<<endl;


char ch = 0;
strNull[2] = chnul;
cout<<strNull<<endl;


int len = strNull.length();
int len2 = strNull.size();

cout<<len<<endl<<len2<<endl;

运行结果(如图)

2、结果分析:
C-风格的字符串,的确是要以空字符结尾的。
而string对象中所存储的内容,是不以空字符结尾的。(不知道严格来说,此处是否可以称之为字符串,因为C++中字符串确实是以空字符结尾的一串字符)。
3、解释
string是C++引入的一种容器,它是可以用来存储字符串的,或者说存储一串字符的,其有效内容不以空字符结尾,而且其长度,我们使用size方法(为了和容器vector等一致而加入的名称)或者length()方法(描述气馁字符串的长度而加入)。而不能使用while( str[i] != '\0')来测试,只有C风格字符串才是这样使用的。


很多不解请大家来指点~~



0 0
原创粉丝点击