無法輸出字符串“her”的是?A.char a[ ]={'h','e','r','\0'}; ? ? ? ? ? ? ? ? ? ? ? B.char a[ ]={'h','e','r',0};puts(a); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? puts(a);C.char a[4]={'h','e','r','0'-48}; ? ? ? ? ? ? ? ? ?D.char a[4]={'h','e',0,'r'};puts(a); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? puts(a);
2 回答
onemoo
TA貢獻883條經驗 獲得超454個贊
你知道 C 語言字符串是“以 null 字符結尾的一串字符”,這個 null 字符通常寫作 '\0',對吧。 所以你知道 A 選項可以輸出 "her"。
回想一下用轉義方式表示字符的寫法,其中一種就是“\八進制數”,所以 '\0' 不是什么特殊表示法,這其實就是八進制數轉義為字符的寫法。既然 C 語言規定 '\0' 是 null 字符,也就是說 null 字符的值其實就是整型數 0。
那么初始化列表中的 0 就會將字符數組中相應元素賦為 null 字符。
B 選項的寫法和 A 選項有同樣的結果。
D 選項自然只能打印出 "he"
C 選項嘛。如果假定使用 ASCII 編碼,那么初始化列表最后一項 '0' 的編碼就是 48,相減后這一項是 0,其實和 B 選項是一樣的。當然也能打印出 "her"。? ? 這里如果我說題目不嚴謹可能有點吹毛求疵了,不過確實無法保證所有編碼中 '0' 的值都是 48。
最后提示下:雖然整型數 0 作為 char 類型就是 null 字符,但最好在你需要使用 null 字符時明確寫 '\0',不要依賴整型 0 自動轉型為 char。
- 2 回答
- 2 關注
- 1261 瀏覽
添加回答
舉報
0/150
提交
取消
