C中memset的行为[重复]

Posted

技术标签:

【中文标题】C中memset的行为[重复]【英文标题】:Behaviour of memset in C [duplicate] 【发布时间】:2017-07-31 10:46:25 【问题描述】:

考虑下面的结构

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 您希望printf() 的输出为10。你预期错了。考虑。 ;-) 它不会打印“某个地址”,它会准确地打印您将var.len 设置为的内容。考虑一下。 ;-) 这与所谓的重复问题不同。那个是关于数组的,这是关于结构的 【参考方案1】:

memsetbyte 值填充内存。您的int 成员很可能需要超过一个字节(取决于您的平台,四个很常见)。所以你正在写入字节并将它们解释为int

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

【讨论】:

以上是关于C中memset的行为[重复]的主要内容,如果未能解决你的问题,请参考以下文章

用于长(64位)类型的C ++ memset()[重复]

C中浮点数组的Memset问题[重复]

C中关于Memset的简单问题[重复]

memset显示错误的结果[重复]

C分配双精度的动态数组并用memset初始化它[重复]

函数“memset”的隐式声明 [-Wimplicit-function-declaration] [重复]