我有這個代碼
#include <stdio.h>
int main()
{
char c='31';
printf("%d\n",c);
}
上面的列印錯誤 49。它應該列印 31。這可以在 C 中完成嗎?我相信31不是數字 31,這意味著 '31' 不表示為二進制00011111= 31 所以這是真的,所以它不能完成或用 C 做有意義
uj5u.com熱心網友回復:
代碼未分配 31
要分配 31,請使用:
//char c='31';
char c = 31; // drop the ''
多位元組字符常量
'31'是具有實作特定值的多位元組字符常量。在 OP 的情況下,它int可能是 ASCII 值 51'3'和 49 以'1' 大端方式連接在一起作為 base-256 數字或51*256 49.
由于該值超出char范圍,因此將其作為分配的一部分(可能僅保留最低有效 8 位)轉換為 49。這就是 OP 所看到的。
省時間
啟用所有編譯器警告。大多數時候,對多位元組字符常量進行編碼是一個編碼錯誤。多位元組字符常量很少使用,并且經常被各種樣式標準阻止。由于大小、位元組序和字符編碼的實作細節給可移植代碼帶來了困難,
C 有一個現在不常用的舊特性。int
uj5u.com熱心網友回復:
如果要將 31 分配給 char,只需按如下方式分配即可
char c = 31;
31 表示 int 很容易適應 8bits 。
uj5u.com熱心網友回復:
Char 型別只能使用一個字母、數字或符號。char c 將等于 '3',然后 '1' 將覆寫它。'1' 的 int 值為 49。
int -- %d 字符 -- %c 字串 -- %s
嘗試
#include <stdio.h>
int main()
{
char c[3] = {'3','1','\0'};
printf("%s\n",c);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/441822.html
標籤:C
上一篇:在Linux上創建C語言程式發送DNSquery,“getostbyname”函式和“int_ntoa”函式出現segmentationfault錯誤
