读书人

string 长度的有关问题

发布时间: 2013-01-02 13:08:44 作者: rapoo

string 长度的问题
请教各位一个问题:


在以前的C++课上,老师说过,“为了兼容C语言,C++中所有字符串字面值都有编译器自动在末尾添加一个空字符”P36
如"A",其实是包含字母A和空字符两个字符的字符串,按照这样,算出来size不是应该是7么,难道str不是字符串字面值?请各位指教!我是数学系跨过来的,菜青菜青的,希望在坛子里,与各位一起进步!
[解决办法]
strlen 是指从第一个字符开始,到最后一个非0字符之间的字符数..

string::size() 和 string::length() 都是指字符串的长度(也就是类似 strlen 的效果),不是指缓冲区的长度...

不要把这2个概念混淆了.

就像一个很简单的问题:

char str[10]="abc";
那么,str这个缓冲区总共有10个字节的空间, sizeof(str) = 10 !!
但是,str这个字符串长度只有3 , 即: strlen(str) = 3 !!

char *str="abc";
此时: str 总共占用4个字节的空间(最后有一个0),但是,strlen(str) 依然是3 !!
[解决办法]
以'\0'结尾,是char字符串的结尾形式,

但对于string类来说,已经不是内置类型,内置类型,包括基本的int double float char等
至于string 的size length成员函数返回内容完全是它自己的事情了,你也可以定义一个自己的MyString类,来完成通常类库的string的内容。。

类库中的string内部维护了一个 char*的指针,所以你说的以'\0'一点错误都没有

返回的6 是告诉你str中占用字节数,,,当然size length是string类的成员函数,每个成员函数都有他的意义,至少是什么看它的实现,在这里size是返回包不包括'\0',都可以的。。。因为它仅仅是个实现了string类的成员函数,不是标准的一部分。。每个类库都可以有它自己的实现。。。


string类 的 size length都是返回其长度的,两个函数有同样的功能。。。。其中很是有趣。。。
[解决办法]
string str = "String";
这里面str是变量,variable.
"String"是字符串字面值,string literal.
比如
int a = 3;
这里3也是字面值.
http://www.cplusplus.com/doc/tutorial/constants/

读书人网 >C++

热点推荐