C++ size(),sizeof(),length(),strlen()的区别与用法#2020-05-25

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()详解和区别