[英]Why does %c print '?' and what is its meaning
兩個例子
printf("\n %c , ((unsigned char)a[i]+100);
printf("\n %c , -11);
退貨
?
?
您在兩個語句中都缺少結尾處的“。正在使用什么編譯器?如果使用帶有-Wall編譯器標志的gcc進行編譯,則會看到:
warning: missing terminating " character
printf("\n %c , ((unsigned char)a[i]+100);
字符-11不是有效的7位ASCII字符。 這也是一個無效的UTF-8字節,因此?
結果。
只有字符0-127對%c
有效。 其他所有內容都將成為多字節UTF-8字符的一部分,或者取決於字符集。
"%c"
預期為int
。
(unsigned char)a[i]+100
是(unsigned char) + (int)
。 當(unsigned char)
為8位(最常見)時,這將導致一個int
。 因此,在下面的兩個代碼中,代碼都將int
傳遞給printf()
。
printf("\n %c , ((unsigned char)a[i]+100);
printf("\n %c , -11);
"%c"
將該int
轉換為unsigned char
。
c
...將int
參數轉換為unsigned char
,並寫入結果字符。 C11dr§7.21.6.18
假設使用8位unsigned char
,則轉換后的值在0到255的范圍內。-11變為245。然后寫入字符。 對於ASCII范圍為0-127的值,我們通常會看到ASCII字符或控制字符的效果。 其他值將打印其他內容。
當然在OP的平台上,輸出默認為?
用於許多超出ASCII范圍的字符。 @稻田
您猜對了, c
返回一個字符。 這意味着在%c
,將在打印字符串中該位置替換一個字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.