首頁  >  文章  >  後端開發  >  為什麼 C 中基於指標和基於陣列的字串的「strlen」和「sizeof」產生不同的結果?

為什麼 C 中基於指標和基於陣列的字串的「strlen」和「sizeof」產生不同的結果?

Patricia Arquette
Patricia Arquette原創
2024-11-02 06:37:02186瀏覽

Why do `strlen` and `sizeof` produce different results for pointer-based and array-based strings in C?

基於指標和基於陣列的字串初始化的字串長度和大小計算的不同輸出

理解結果

理解結果
<code class="c">char *str1 = "Sanjeev";
char str2[] = "Sanjeev";</code>

理解結果

>
  • 建立具有相同值的基於指標的字串str1 和基於陣列的字串str2 時,函數strlen 和sizeof 會產生不同的結果。具體來說,對於聲明:
  • strlen 對於 str1 和 str2 都傳回 7,因為它測量字元序列的長度,不包括末尾的空終止符 ( )。

但是,sizeof 會產生不同的值:

sizeof(str1) 傳回4,因為它計算指標變數的大小,通常為4 個位元組(32 位元系統) 。

sizeof(str2) 傳回 8,因為它決定陣列的大小,其中包括空終止符,從而產生 8 個位元組(7 個字元 1 個空終止符)。

基本差異:資料類型與記憶體分配

<code class="c">char str2[8];
strncpy(str2, "Sanjeev", 7);
char *str1 = str2;</code>
sizeof 測量資料類型的大小,而 strlen 測量字元序列的長度。對於str1,它是一個指向char的指針,因此sizeof傳回指標的大小。對於 str2,它是一個字元數組,因此 sizeof 傳回整個數組的大小,包括空終止符。

    仔細看看
  • 來示範更好區分,考慮:

現在,str1 和 str2 都指向同一個陣列。它們的strlen 值為7,但它們的sizeof 值不同:

sizeof(str1) 為4(指標大小)sizeof(str2) 為8(帶有空終止符的陣列大小) )這說明了大小評估如何取決於底層資料結構。

以上是為什麼 C 中基於指標和基於陣列的字串的「strlen」和「sizeof」產生不同的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn