對於基於指標和陣列的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中文網其他相關文章!