簡體   English   中英

為什么%c打印'?' 它是什么意思

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

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