c - C 中 memset 的行为

标签 c memset

考虑下面的结构

struct A
{
    int len;
    int wid;
    int size;
};

void main()
{
    struct A var;
    memset(&var,10,sizeof(struct A));
    printf("value of len is %d\n",var.len);
}

当我运行程序时,我期望所有结构成员都将初始化为 10,但它没有发生。它正在打印一些垃圾值

但是当我用 0 执行 memset 或用 1 执行 memset 时,它会起作用。

memset(&var,0,sizeof(struct A));
printf("value of len is %d\n",var.len);

有人可以解释一下 memset 的这种行为

最佳答案

memset字节值填充内存。您的 int 成员很可能需要多个字节(根据您的平台,四个字节很常见)。因此,您正在写入字节并将它们解释为 int

您的第二个示例按预期工作,因为 int 的全零表示形式需要解释为值 0

关于c - C 中 memset 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45413783/

相关文章:

c++ - 将现有数组归零的最快方法是什么?

c - memset() 中的错误 3D 数组

c - 输入/输出问题

c - 我如何编写一个返回字符串的函数?

c++ - 使用 C 程序启用禁用键

c - 使用 memset 初始化三值结构数组

c - 双重释放或释放时出现损坏错误

c - 在 Unix/Solaris 中验证用户名

c - while(fgets) 之后的 memset()

c - 我想使用 memset 从字符串中删除一些字符