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】:
memset
用 byte 值填充内存。您的int
成员很可能需要超过一个字节(取决于您的平台,四个很常见)。所以你正在写入字节并将它们解释为int
。
您的第二个示例按预期工作,因为int
的全零表示需要被解释为值0
。
【讨论】:
以上是关于C中memset的行为[重复]的主要内容,如果未能解决你的问题,请参考以下文章