這個問題在這里已經有了答案: char 陣列是否保證以空值結尾? (4 個回答) 8 小時前關閉。
在 C 中,字串總是以一個\0字符結尾,所以字串的長度是字符數 1。所以,如果你需要初始化一個 12 個字符的字串,你必須“允許一個元素作為終止字符” (來自第 221 頁,“開始 C”,霍頓)。
好的,我們試試
#include <stdio.h>
int main(void)
{
char arr1[12] = "Hello world!";
char arr2[] = "Hello world!";
printf("\n>%s< has %lu elements", arr1, sizeof(arr1) / sizeof(arr1[0]));
printf("\n>%s< has %lu elements", arr2, sizeof(arr2) / sizeof(arr2[0]));
return 0;
}
輸出
>Hello world!< has 12 elements
>Hello world!< has 13 elements
為什么 C 編譯器允許我創建一個arr1沒有\0字符的固定大小的陣列,并\0在我要求一個可變大小的陣列時添加arr2?
uj5u.com熱心網友回復:
當你定義一個固定大小的陣列并用字串字面量初始化它時:
- 如果大小小于字串中的字符數(不包括終止空字符),編譯器將抱怨不匹配。
- 如果大小等于字串中的字符數(不包括終止空字符),編譯器將使用字串中的字符初始化陣列,而沒有終止空字符。這用于初始化一個陣列,該陣列將僅用作字符陣列,而不是字串。(字串是由空字符終止的字符序列。)
- 如果大小大于字串中的字符數,編譯器將使用字串中的字符和終止空字符初始化陣列。陣列中超出此范圍的任何元素也將初始化為零。
當您定義一個沒有指定大小的陣列并使用字串文字對其進行初始化時:
- 編譯器計算字串文字中的字符數,包括終止空字符,并確定陣列大小。
這些是 C 標準的規則。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/373368.html
標籤:C
下一篇:如何正確訪問這個重新分配的陣列?
