c/c++中有以下函数:size()、sizeof() 、strlen()、str.length();
strlen(str)和str.length()和str.size()都可以求字符串str的长度。
其中str.length()和str.size()是string类对象的成员函数,strlen(str)用于求字符数组的长度,其参数是char*。
一、数组或字符串的长度:sizeof()、strlen()
1、sizeof():返回所占总空间的字节数
(1)对于整型或字符型数组
(2)对于整型或字符型指针
2、strlen():返回字符数组或字符串所占的字节数
(1)针对字符数组
(2)针对字符指针
sizeof()为运算符,结果类型是size_t,它在头文件中typedef为unsigned int类型。 其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。
功能:获得保证能容纳实现所建立的最大对象的字节大小。由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。
strlen()是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。
功能:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符’\0’。返回的长度大小不包括’\0’。
如果你只定义char*而没有给它赋初值,那么strlen()的结果是不定的,它会从其首地址一直找下去,直到遇到’\0’停止。
二、c++中的size()和length()没有区别
length()是因为沿用C语言的习惯而保留下来的,string类最初只有length(),引入STL之后,为了兼容又加入了size(),它是作为STL容器的属性存在的,便于符合STL的接口规则,以便用于STL的算法。 string类的size()/length()方法返回的是字节数,不管是否有汉字。
三、示例代码:
1.lengh()和size()
1 2 3 4 5 6 7 8 9 10 11 | #include <string> #include <iostream> using namespace std; int main() { string str = "This is a string"; cout << str.length() << endl; cout << str.size() << endl; return 0; } |
2.strlen()
1 2 3 4 5 6 7 8 9 10 11 12 | #include <string> #include<iostream> using namespace std; int main() { string str = "This is a string"; char cstr[20]; strcpy_s(cstr, str.c_str()); cout << strlen(cstr) << endl; return 0; } |
3.sizeof()
1 2 3 4 5 6 7 8 9 10 11 12 | #include <string> #include<iostream> using namespace std; int main() { string str = "This is a string"; cout << sizeof(str) << endl; cout << sizeof(string) << endl; cout << sizeof(int*) << endl; return 0; } |
参考博客:
c/c++中sizeof()、strlen()、length()、size()详解和区别