首頁 後端開發 C++ 為什麼 C 中指標和基於陣列的字串初始化時「strlen」和「sizeof」會傳回不同的值?

為什麼 C 中指標和基於陣列的字串初始化時「strlen」和「sizeof」會傳回不同的值?

Nov 01, 2024 am 07:14 AM

Why do `strlen` and `sizeof` return different values for pointer and array-based string initialization in C?

對於基於指標和陣列的String init 的strlen 和sizeof 的不同答案[重複]

在C 程式語言中,當聲明一個數組和指向字串的指針,可以使用“strlen”和“sizeof”函數獲得不同的輸出。理解這種差異對於有效的記憶體管理和資料處理至關重要。

為了說明這種差異,請考慮以下程式碼片段:

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

產生的輸出將是:

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

「strlen」函數會傳回字串中的字元數,不包括空終止符。在這兩種情況下,字串都包含 7 個字元。另一方面,「sizeof」函數傳回記憶體中資料類型的大小。

對於指標“str1”,“sizeof(str1)”傳回指標變數本身的大小,在大多數系統上通常為 4 個位元組。這是因為「str1」不是一個數組,而只是一個指向字串「Sanjeev」的指標。

相較之下,「str2」是一個字元陣列。 'sizeof(str2)' 傳回整個陣列的大小,包括空終止符。結果,它輸出 8 個位元組:7 個位元組用於字符,1 個位元組用於空終止符。

要進一步理解這個概念,請考慮以下修改後的程式碼:

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

這此時,輸出將是:

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

即使'str1'和'str2' 引用相同的字串,'sizeof' 輸出仍然相同。這是因為「str1」仍然是一個指針,而「str2」仍然是一個陣列。兩者的“strlen”輸出都保持為 7,因為它只計算字串中的字元。

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

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

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

c語言函數返回值的類型有哪些?返回值是由什麼決定的? c語言函數返回值的類型有哪些?返回值是由什麼決定的? Mar 03, 2025 pm 05:52 PM

c語言函數返回值的類型有哪些?返回值是由什麼決定的?

Gulc:從頭開始建造的C庫 Gulc:從頭開始建造的C庫 Mar 03, 2025 pm 05:46 PM

Gulc:從頭開始建造的C庫

c語言函數格式字母大小寫轉換步驟 c語言函數格式字母大小寫轉換步驟 Mar 03, 2025 pm 05:53 PM

c語言函數格式字母大小寫轉換步驟

c語言函數的定義和調用規則是什麼 c語言函數的定義和調用規則是什麼 Mar 03, 2025 pm 05:53 PM

c語言函數的定義和調用規則是什麼

distinct用法和短語分享 distinct用法和短語分享 Mar 03, 2025 pm 05:51 PM

distinct用法和短語分享

c語言函數返回值在內存保存在哪裡? c語言函數返回值在內存保存在哪裡? Mar 03, 2025 pm 05:51 PM

c語言函數返回值在內存保存在哪裡?

C標準模板庫(STL)如何工作? C標準模板庫(STL)如何工作? Mar 12, 2025 pm 04:50 PM

C標準模板庫(STL)如何工作?

如何有效地使用STL(排序,查找,轉換等)的算法? 如何有效地使用STL(排序,查找,轉換等)的算法? Mar 12, 2025 pm 04:52 PM

如何有效地使用STL(排序,查找,轉換等)的算法?

See all articles