区分sizeof()、size()、strlen()以及length()以及如何使用
一、区分sizeof()和strlen()
首先,sizeof()【操作数所占空间的字节数大小】是一种c中的基本运算符。(是操作符,并不是函数)可以以类型、指针、数组和函数等作为参数。
它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。由于在编译时计算,因此 sizeof() 不能用来返回动态分配的内存空间的大小。
char str[30];
gets(str); //输入str
cout<<sizeof(str)<<endl;
这里,如果我输入“Hello”,那么输出的结果会是什么呢?5?还是6?
没错,输出的结果是30,因为sizeof() 在该段程序中的作用是计算字符数组str所占空间字节数的大小,而字符数组str在创建时,系统自动给他分配了30个空间字节,所以无论输入什么(前提是不超过字符数组的范围),输出结果都会是30。(这一点也侧面说明了sizeof()其值在编译时即计算好了)
而相比较于sizeof(),strlen() 是一种函数,用于计算字符串的长度,(只能计算字符串),‘\0’作为终止符,返回的长度大小不包括’\0’,并且 strlen 的结果是运行的时候才出来(不是编译期求值)
char str[30];
gets(str);
cout<<strlen(str)<<endl;
这里,我们输入“Hello”,那么输出的结果就会是5,即字符数组str的长度。
- strlen函数求得的字符串长度是从字符串第一个元素到第一个’\0’之间元素的个数
- sizeof求得的结果是存储该字符串的变量占用的空间大小,因而一定会包括’\0’.若’\0’后还有空余的空间,也会包含到结果里面
二、size()函数以及length()函数
C++中,在获取字符串长度时,size()函数与length()函数作用相同。
string str;
cin>>str;
cout<<str.size()<<endl;
cout<<str.length()<<endl;
这里,我们同样还是输入字符串“Hello”,两个函数结果都为5。
总结:
- sizeof() 可以以类型、指针、数组和函数等作为参数,其值在编译时计算,用于获取操作数所占空间的字节数大小。
- strlen()函数其参数只能为char*(字符型指针),所以在计算字符数组(char str[ ])时,一般用strlen()函数(也只能用于计算字符数组了)。
- size()函数以及length()函数都用于计算字符串(string)长度,不能用char*作为参数。除此之外,size()函数还可以获取vector类型的长度。