【发布时间】:2016-02-04 19:16:26
【问题描述】:
我是 C 编程的新手,我在尝试在 char 数组中分配超过 127 (0x7F) 的值时遇到了一些问题。在我的程序中,我使用通用二进制数据,将先前获取的字节流(例如,使用 fopen 或 fgets,然后使用一些按位运算处理)打印为 %c 或 %d 没有任何问题。
但如果我尝试从它的数值中打印一个字符,如下所示:
printf("%c\n", 128);
它只打印 FFFD(替换字符)。
这是另一个示例:
char abc[] = {126, 128, '\0'}; // Manually assigning values
printf("%c", abc[0]); // Prints "~", as expected
printf("%c", 121); // Prints "y"
pritf("%c", abc[1]; // Should print "€", I think, but I get "�"
我有点困惑,因为我可以通过这些方式打印低于 128 的每个字符。
我问这个的原因是因为我需要使用 rand( ) 函数。
这是一个例子:
char abc[10];
srand(time(NULL));
abc[0] = rand() % 256; // Gives something between 00:FF ...
printf("%c", abc[0]); // ... but I get "�"
如果这有帮助,源代码以 UTF-8 编码,但更改编码没有任何效果。
【问题讨论】:
-
我不明白你的意思
printf("%c\n", 128);只是返回FFFD(替换字符)。 函数printf返回打印的字符数。 -
@WeatherVane 对不起,我的意思是它在屏幕上打印替换字符,而不是作为返回值。已编辑
-
程序之外的其他东西必须生成那个“替换字符”。当我运行你的程序时,它会打印一个值为
0x80的字符。
标签: c character-encoding char