You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中这样使用memset()是否正确?向void*缓冲区首4字节写入整数

问题修正与解答

int类型大小说明

你认为int占4字节的结论符合绝大多数主流桌面、移动端平台的实际情况,但C语言标准本身没有规定int的固定长度,仅要求它的长度至少为2字节,实际大小由编译器和目标硬件架构决定,比如部分8位/16位嵌入式平台的int长度就是2字节。

你的代码存在的问题

你写的memset(buffer, '9', sizeof(int))无法实现写入整数的需求:

  • memset函数的作用是逐字节填充固定值,它的第二个参数会被转换为unsigned char类型,然后重复填充到目标内存的每个字节中。你传入的是字符'9',对应的ASCII码是十进制57,执行完代码后buffer前4个字节的每个字节值都是0x39(即十进制57),最终这4字节拼接出的int值为0x39393939(十进制959989817),和你预期的整数值完全不同。

正确实现方式

  • 如果你要写入指定整数值(比如整数值9),直接对强转后的指针赋值即可:
*(int *)buffer = 9;
  • 如果你确实需要将前4个字节逐字节填充为同一个固定值(比如全填0、全填0xff),才适合用memset,例如填充全0的写法是:
memset(buffer, 0, sizeof(int));

注意事项

操作前需要确保buffer指向的可写内存空间至少有sizeof(int)字节,避免越界访问触发崩溃。如果该缓冲区用于跨平台数据传输,还需要额外考虑大小端字节序兼容问题。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:24:02