c - 是否存在此 C 代码无法按预期工作的情况?

标签 c type-conversion memcpy

在 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/

相关文章:

c++ - C++ 中函数签名的定义顺序

f# - 可区分联合中类型之间的转换

c - 使用 memcpy 将字符串复制到字符数组时出现段错误

c - 使用 memcpy 从字符串复制到 void 指针的问题

c++ - 将字符打印到控制台应用程序

java - 在此程序中无法将 String 转换为 int

c - nRF24 - 收到数据但不是整个消息

c++ - 理解 memcpy

c - 如何在 C 中创建结构体文字的数组文字?

c - 预期参数类型和 printf 中提供的参数的差异