strlen 和sizeof 計算字串長度

2021-06-28 15:19:42 字數 1288 閱讀 9531

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

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

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

[cpp]view plain

copy

void

test6()  

;  char

s3 = 

"hello\0 world"

;  char

s4 = ;     

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 常用來求變數占用記憶體空間的大小,因而它返回的是儲存字串的變數所占用的記憶體空間大小,用來求字串的長度,只在特定情況下可行,即字元陣列剛好被乙個字串佔滿。4

在引數是字串指標的函式中呼叫strlen()和sizeof()計算字串長度時,結果分別為字串長度(中間含\0時,strlen()停止)和指標長度4。

C語言 sizeof和strlen的計算

sizeof是乙個關鍵字,求字串所佔的位元組數。printf d n sizeof int printf d n sizeof a printf d n sizeof a strlen是乙個函式,求字串的長度,結束符 0之前的字元個數。看一下下面幾組練習 一維陣列 int a printf d n ...

strlen和sizeof的區別以及計算盲區

1.sizeof是算符,strlen是函式 2.sizeof其值在編譯時即計算好了,strlen的結果要在執行的時候才能計算出來,時用來計算字串的長度,sizeof則是型別佔記憶體的大小 strlen是庫函式,在標頭檔案string.h裡面。引數必須是字元型指標 char 當陣列名作為引數傳入時,實...

sizeof和strlen和 countof的區別

運算子,計算引數所佔記憶體 int nnum2 strlen arr 是函式,求字元的個數,不包括 0 int nnum3 countof arr windows巨集 計算陣列的元素個數 cout nnum1 cout nnum2 cout nnum3 endl int arr1 20 nnum1 ...