誰能解釋為什么 strlen 回傳 1 知道 ptr1 的大小是 4 ?
int main()
{
char ptr1[4];
printf("%lu", strlen(ptr1));
}
結果是:1
uj5u.com熱心網友回復:
陣列的大小只能在使用sizeof運算子的相同詞法背景關系中使用。
例子:
int main()
{
char ptr1[4];
printf("%zu\n", sizeof(ptr1));
}
這也適用于可變長度陣列,但不適用于函式的陣列引數,因為它們實際上是指標,所以要小心。
strlen另一方面,通過搜索終止 NUL 位元組來計算 C 字串的長度,這對于非字串陣列并不是很有用。此外,由于陣列有一個未定義的值,呼叫strlen它會導致未定義的行為,即使是字串,您也需要額外確保字串終止,或者使用strnlen(POSIX) 或memchr(C89)。
uj5u.com熱心網友回復:
strlen()回傳字符數直到達到\0(不包括\0)。
而且,char[] 的初始值不是確定性的,我們無法確定。
在您的情況下,您的陣列的容量為 4,但它可能會使用 {'a','\0', ... } 之類的東西進行初始化,因此strlen()回傳 1。
您可以使用
size_t n = sizeof(array) / sizeof(array[0]);
獲取陣列中的元素數(在您的情況下為 4)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/516697.html
標籤:C记忆堆
