首頁 > 後端開發 > C++ > 主體

為什麼 C 中的指標和陣列的「strlen」和「sizeof」會產生不同的輸出?

DDD
發布: 2024-11-01 03:03:02
原創
1047 人瀏覽過

Why Do `strlen` and `sizeof` Produce Different Outputs for Pointers and Arrays in C?

由於指標和陣列初始化,Strlen 和Sizedof 的不同輸出

在C 程式設計中,sizeof 和strlen 函數提供有關大小和大小的資訊分別是資料類型的長度。但是,在處理指標和陣列時,這些函數的輸出可能不同,從而導致混亂。

考慮以下示例:

<code class="c">char *str1 = "Sanjeev";
char str2[] = "Sanjeev";
printf("%d %d\n", strlen(str1), sizeof(str1));
printf("%d %d\n", strlen(str2), sizeof(str2));</code>
登入後複製

此代碼的輸出是:

7 4
7 8
登入後複製
登入後複製

解釋:

  • Str1(指標初始化): str1 被初始化為指向字串「Sanjeev」的指標。 sizeof(str1) 給出指標的大小,在大多數體系結構中為 4 個位元組。另一方面,strlen(str1)傳回str1所指向的字串的長度,即7(不包括空終止符'')。
  • Str2(陣列初始化): str2 被初始化為長度為 8 的字元陣列。 sizeof(str2) 給出該數組的大小,包括空終止符,即 8 個位元組。同樣,strlen(str2) 傳回數組中儲存的字串的長度,也是 7。

為了進一步闡明差異,請考慮對程式碼進行以下修改:

<code class="c">char str2[8];
strncpy(str2, "Sanjeev", 7);
char *str1 = str2;
printf("%d %d\n", strlen(str1), sizeof(str1));
printf("%d %d\n", strlen(str2), sizeof(str2));</code>
登入後複製

在這種情況下,輸出將是:

7 4
7 8
登入後複製
登入後複製

即使str1 和str2 現在都引用同一個字串,sizeof(str1) 仍然會傳回指標的大小。這是因為 str1 是指向數組第一個元素的指針,而 str2 是字元數組。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板