如何求C語言字串長度(strlen函式和sizeof關鍵字)
原文出處:http://blog.csdn.net/kstrwind/article/details/8036555
----------------------------------------------------------------------------------------------------------------------------------------------------------
C語言字串長度的計算是程式設計時常用到的,也是求職時必考的一項。
C語言本身不限制字串的長度,因而程式必須掃描完整個字串後才能確定字串的長度。
在程式裡,一般會用strlen()函式或sizeof來獲取一個字串的長度,但這2種方法獲取的字串的長度其實是不一樣,我們用如下函式進行測試:
注意,該函式裡面定義了4個字串,基本資料都是“hello world",但需要注意的是,字串s1和s2給定了字串陣列的大小為20,然後使用2種方式進行賦值;字串s3和s4是s1和s2對比的字串, 區別就是s3和s4字串中間插入了一個'\0'。該函式執行的結果如下:void test6() { char s1[20] = "hello world"; char s2[20] = {'h','e','l','l','0',' ','w','o','r','l','d','\0'}; char s3[] = "hello\0 world"; char s4[] = {'h','e','l','l','0','\0',' ','w','o','r','l','d','\0'}; printf("%d\t%d\t%d\t%d\n",strlen(s1),strlen(s2),strlen(s3),strlen(s4)); printf("%d\t%d\t%d\t%d\n",sizeof(s1),sizeof(s2),sizeof(s3),sizeof(s4)); }
從執行結果可以看出,strlen()函式和sizeof求字串長度需要注意下面幾點:
1. strlen函式求得的字串長度是從字串第一個元素到第一個'\0'之間元素的個數(如果字串中間有'\0',則結果不是整個字串的長度),同時不包括該'\0'
2. sizeof求得的結果是儲存該字串的變數佔用的空間大小,因而一定會包括'\0'.若'\0'後還有空餘的空間,也會包含到結果裡面
解釋(與2種求值方式的實現原理有關):
1. strlen()的一種實現就是遍歷字串,遇到'\0'就終止,因而返回的結果是第一個'\0'前字元元素的個數
2. sizeof 常用來求變數佔用記憶體空間的大小,因而它返回的是儲存字串的變數所佔用的記憶體空間大小,用來求字串的長度,只在特定情況下可行,即字元陣列剛好被一個字串佔滿。
---------------------------------------------------------------------------------------------------------------------------------------------------------
擴充套件:
在C語言中,與strlen函式不同的是,sizeof不是一個函式,而是判斷資料型別或者表示式長度符的關鍵字,也可以說是C/C++中的一個操作符(operator),其作用就是返回一個物件或者型別所佔的記憶體位元組數。 注意:位元組數的計算在程式編譯時進行,而不是在程式執行的過程中才計算出來!
陣列的sizeof值等於陣列所佔用的記憶體位元組數,如: char a1[] = "abc";
int a2[3];
sizeof( a1 ); // 結果為4,字元末尾還存在一個NULL終止符
sizeof( a2 ); // 結果為3*4=12(依賴於int) 那麼如何求陣列中元素的個數呢?(以下兩種方式是等價的)
int c1=
sizeof
(a1)/
sizeof
(
char
);
//總長度/單個元素的長度 char型
int c2=
sizeof
(a2)/
sizeof
(a2[0]);
//總長度/第一個元素的長度 int型