C/C++中sizeof()、strlen()、length()、size()詳解和區別

Table of Contents

目標

總括

數組或字符串的長度:sizeof()、strlen()

舉例

sizeof()、strlen()兩者區別


目標

均是獲取字符串長度。

總括

strlen(str)和str.length()和str.size()都可以求字符串長度。
其中str.length()和str.size()是用於求string類對象的成員函數
strlen(str)是用於求字符數組的長度,其參數是char*。

數組或字符串的長度:sizeof()、strlen()

1、sizeof():返回所佔總空間的字節數
(1)對於整型字符型數組
(2)對於整型或字符型指針

功能:

獲得保證能容納實現所建立的最大對象的字節大小。由於在編譯時計算,因此sizeof不能用來返回動態分配的內存空間的大小。

2、strlen():返回字符數組或字符串所佔的字節數
(1)針對字符數組
(2)針對字符指針

strlen(char*)函數求的是字符串的實際長度。

舉例

1)char* ss = "0123456789";

sizeof(ss)爲4,ss是指向字符串常量的字符指針,sizeof 獲得的是指針所佔的空間,則爲4
sizeof(*ss)爲1,*ss是第一個char字符,則爲1

2)char ss[] = "0123456789";

sizeof(ss)爲11,ss是數組,計算到'\0'位置,因此是(10+1)
sizeof(*ss)爲1,*ss是第一個字符

3)char ss[100] = "0123456789";

sizeof(ss)爲100,ss表示在內存中預分配的大小,100*1
strlen(ss)爲10,它的內部實現用一個循環計算字符串的長度,直到'\0'爲止。

4)int ss[100] = "0123456789";

sizeof(ss)爲400,ss表示在內存中預分配的大小,100*4
strlen(ss)錯誤,strlen參數只能是char*,且必須是以'\0'結尾

5)char[] a={'a','b','c'};
sizeof(a)的值應該爲3。

char[] b={"abc"};
sizeof(b)的值應該是4。

若string str={'a','b','c','\0','X'};
那麼sizeof(str)爲5,strlen(str)爲3。

sizeof()、strlen()兩者區別


c++中的size()和length()沒有區別

如:

string str="0123456789";
cout <<"str.length()="<<str.length()<<endl;//結果爲10
cout <<"str.size()="<<str.size()<<endl;//結果爲10

爲了兼容,這兩個函數一樣。 length()是因爲沿用C語言的習慣而保留下來的,string類最初只有length(),引入STL之後,爲了兼容又加入了size(),它是作爲STL容器的屬性存在的,便於符合STL的接口規則,以便用於STL的算法。 string類的size()/length()方法返回的是字節數,不管是否有漢字。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章