[英]What happens when I initialize a char array without setting the array size in C
當我初始化char str1[] = {'a','b','c'}
類的 char 數組(未設置數組大小)並使用循環找到它的長度時,直到str1[i] != '\0'
,我得到length = 4
。 相反,當我像char str2[10] = {'a','b','c'}
(數組大小已設置)進行初始化並使用相同的方式查找長度時,我得到length = 3
。 為什么str1[3]
包含垃圾值但str2[3]
中沒有?
char str1[] = {'a', 'b', 'c'};
創建一個包含 3 個字符的數組,其值為'a'
、 'b'
和'c'
。 數組的大小為 3,您可以使用sizeof str1
看到它(這會返回字節數,但由於char
被定義為 1 字節,因此它與元素數相同)。 嘗試計算包含在此數組中的字符串的長度會導致未定義的行為,因為str1
不包含 C 樣式的字符串,因為它沒有'\0'
終止符。 您的循環計算超出了數組的范圍。
char str2[10] = {'a', 'b', 'c'};
創建一個包含 10 個字符的數組,其值為'a'
、 'b'
、 'c'
和 7 個'\0'
。 數組的大小是 10。計算str2
中字符串的長度會得到 3,因為str2[3]
是'\0'
;
如果要創建包含 C 樣式字符串而不指定大小的數組,可以執行char str[] = {'a', 'b', 'c', '\0'};
,或者更簡單地說, char str[] = "abc";
.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.