在 x86 或 x64 计算机上是否存在此程序不会输出 0xFFFF 的任何可能情况?还是保证可以毫无问题地工作?
#include <stdlib.h>
#include <stdio.h>
int main()
{
unsigned short int s = 0;
unsigned long int l = 0xFFFFFFFF;
memcpy(&s, &l, sizeof(short));
printf("0x%.4X", s);
return 0;
}
最佳答案
由于 C 不保证数据类型的最大大小,仅保证最小数据类型,如果您使用编译器 unsigned long
取超过 32 位,其中初始字节的地址对应于unsigned long
的最高有效字节(即大端字节序)这不会产生 FFFF
结果。
关于c - 是否存在此 C 代码无法按预期工作的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19329020/