1. 程式人生 > >如何求C語言字串長度(strlen函式和sizeof關鍵字)

如何求C語言字串長度(strlen函式和sizeof關鍵字)

原文出處:http://blog.csdn.net/kstrwind/article/details/8036555

----------------------------------------------------------------------------------------------------------------------------------------------------------

C語言字串長度的計算是程式設計時常用到的,也是求職時必考的一項。

C語言本身不限制字串的長度,因而程式必須掃描完整個字串後才能確定字串的長度。

在程式裡,一般會用strlen()函式或sizeof來獲取一個字串的長度,但這2種方法獲取的字串的長度其實是不一樣,我們用如下函式進行測試:

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));
}
注意,該函式裡面定義了4個字串,基本資料都是“hello world",但需要注意的是,字串s1和s2給定了字串陣列的大小為20,然後使用2種方式進行賦值;字串s3和s4是s1和s2對比的字串, 區別就是s3和s4字串中間插入了一個'\0'。該函式執行的結果如下:

從執行結果可以看出,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型