2010-02-13 57 views
3

C字符串是空終止的,這意味着在char陣列中,索引爲strlen()的字符是一個字節,其所有位都設置爲0.我看過代碼,而不是'\0',使用整數0。但是自從sizeof(int) > sizeof(char)以來,這可能實際上超出了爲陣列分配的空間 - 我錯了嗎?或者在這種情況下,編譯器是否隱式投射intchar使用0而不是' 0'終止一個c字符串是錯誤的嗎?

回答

10

是的你錯了 - 零值將被截斷。畢竟,如果你寫:

char c = 0; 

你不會指望編譯器寫超出變量c的範圍,我希望。如果你寫這樣的東西:

char c = 12345; 

然後編譯器應該警告你的截斷。 GCC產生:

c.c:2: warning: overflow in implicit constant conversion 

但仍然沒有什麼會被寫入變量的界限之外。

13

將值0存儲在char s的數組中時,int將隱式轉換爲char。

其實,'\0'類型是int(相反的是人們可以預期),所以somechararray[x]=0somechararray[x]='\0'語義等價。

就我個人而言,我更喜歡用'\0'來更清楚地說明我正在處理一個字符串。

相關問題