我在 C 语言中处理字符数组时遇到了一个奇怪的现象。 基本代码:
char buffer[2];
buffer[0] = 0x7F; /*until this value I get normal behaviour*/
buffer[1] = 0x80; /*from this value I get leading ones*/
printf("%X\n", buffer[0]);
printf("%X\n", buffer[1]);
这打印:
7F
FFFFFF80
只是为了确保我检查过
printf("%d\n", sizeof(char));
printf("%d\n", sizeof(int*));
正如预期的那样,我收到了:
1
4
所以在我的机器(32 位、x86、小端、Ubuntu 12.04.5 VM)上,一个字符是 1 个字节,一个字是 4 个字节。
当我将整个单词发送到 printf()
时,我得到 1 个填充。
我可以接受零填充,但这很奇怪......
有人有解释吗?
char 数组不是真正的字符序列,而是我们只考虑第一个字节的单词序列吗? (言下之意,相同长度的char数组和int数组在内存中占用的空间大小相同)
最佳答案
printf
不知道每个参数有多大;你必须告诉它,在这种情况下使用 hh
长度说明符:
printf("%hhX\n", buffer[1]);
但是,您的情况下的行为仍然很明确,因为小于 int
的参数被提升为 int
或 unsigned int
一种必须等效于 0 填充或符号扩展的方式。
关于c - 一个字符是否作为带有填充的整个单词保存在内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36746142/