【发布时间】:2013-05-13 17:58:11
【问题描述】:
在通过一些链接遍历 Wikipedia 时,我偶然发现了 the following code example 将 char 缓冲区初始化为 0,但随后 memsets 在使用前将其初始化为 0。这是必要的吗?如果是这样,为什么?我问的原因是我不是专家,示例清楚地表明这是编码人员的意图,在 memset 上添加注释“/* Really initialized to zeroes */”,而不是在初始化时使用“/* initialized to zeroes */”。
编辑:请注意,我已经回滚了导致此问题的维基百科页面上的编辑,因此它不再在链接中可见。
【问题讨论】:
-
本质上,清理存储在分配的内存部分中用于先前计算的“垃圾”
-
您会看到两个方向的示例 - 代码无法正确确保缓冲区已初始化,但由于某种形式的运气而没有遇到问题(我称之为测试运气不佳)没有发现错误)。另一方面,我经常看到这样的代码:
memset(buffer,0,sizeof(buffer));snprintf(buffer,sizeof(buffer),"foo is %d",foo);不需要清除缓冲区,因为它总是会得到一个格式良好的、以空结尾的字符串。但我想,安全总比后悔好。
标签: c initialization memset