讓我們考慮以下示例:
int main()
{
char some_string[] = "12345678";
printf("%zu", sizeof(some_string));
return 0;
}
輸出
9
...Program finished with exit code 0
Press ENTER to exit console.`
以上是正確的。var的大小some_string為 8 個字符 NUL 位元組 = 9
現在,如果我們將其更改為:
int main()
{
char some_string[8] = "12345678";
printf("%zu", sizeof(some_string));
return 0;
}
它列印:
8
...Program finished with exit code 0
Press ENTER to exit console.`
為什么后一種情況會忽略 NUL 位元組?
uj5u.com熱心網友回復:
在 C 中,如果在定義中為陣列提供了大小,則無論初始值設定項如何,陣列都是該大小。該大小或更小的字串字面量可用于初始化字符陣列,而與該大小完全相同的字串字面量(不包括空字符)可用于初始化該陣列。C 2018 6.7.9 14 說:
字符型別的陣列可以由字串文字或 UTF-8 字串文字初始化,可選用大括號括起來。字串文字的連續位元組(如果有空間或陣列大小未知,則包括終止的空字符)初始化陣列的元素。
這是允許的,因為有時字符陣列被用作純資料(例如,作為查找表)而不是作為以 null 結尾的字串,但使用字串文字來初始化它們可能更方便。
uj5u.com熱心網友回復:
與 C 相比,在 C 中,允許使用字串字面量初始化字符陣列,使其不包含空終止字符,方法是限制陣列的長度,使其成為字串的長度沒有空字符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/419667.html
標籤:
