Table of Contents
目標
均是獲取字符串長度。
總括
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()方法返回的是字節數,不管是否有漢字。