首頁 > 後端開發 > C++ > 為什麼 C 中指標和陣列字串初始化時「strlen」和「sizeof」給出不同的結果?

為什麼 C 中指標和陣列字串初始化時「strlen」和「sizeof」給出不同的結果?

Mary-Kate Olsen
發布: 2024-11-01 00:42:28
原創
264 人瀏覽過

Why do `strlen` and `sizeof` give different results for pointer and array string initialization in C?

指標與陣列字串初始化:strlen 和sizeof 的差異

在C 程式設計中,使用指標和陣列來初始化字串可能會導致意想不到的差異strlen 和sizeof 的輸出。讓我們透過檢查特定範例來分析這種現象。

提供的程式碼片段:

<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)

  • strlen(str1) 傳回 7,表示 的長度str1 所指向的字串(不包括空終止符)。
  • sizeof(str1) 回傳 4,因為 str1 是一個具有 4 個位元組記憶體位址的指標變數(32 位元系統)。

Array (str2)

  • 考慮到陣列中字串的長度,strlen(str2) 也會回傳 7。
  • sizeof( str2) 傳回 8,因為 str2 是一個包含 8 個字元的陣列,包括空終止符。

為了進一步說明這些概念,讓我們稍微修改一下程式碼:

<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>
登入後複製

這段程式碼將以 strlen: 7 的形式對 str1 和 str2 產生相同的結果。但是,sizeof(str1) 將保持為 4,表示記憶體位址,而 sizeof(str2) 將調整為 8,仍然考慮空終止字元。

因此,關鍵要點是在 C 程式設計中使用字串時了解指標和陣列的不同資料類型和大小特徵。

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

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