簡體   English   中英

當我初始化一個 char 數組而不在 C 中設置數組大小時會發生什么

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM