在遍历维基百科跟随某些链接时,我偶然发现the following code example,它将char缓冲区初始化为0,但在使用前将memset
设置为0。这是必要的吗?如果是这样,为什么?我问的原因是我不是专家,并且示例清楚地表明,这是编码员的意图,在memset
上的评论“/* Really initialized to zeroes */
”,而不是在初始化上的“/* initialized to zeroes */
”。memsetting初始化缓冲区的原因是什么
编辑:请注意,我回滚了导致此问题的维基百科页面上的编辑,因此它在链接中不再可见。
重要的是,在分配的内存部分中存储用于先前计算的清理“垃圾” – 2013-05-13 18:00:33
您会在两个方向看到示例 - 代码无法正确确保缓冲区已初始化,但由于某种形式而未遇到问题幸运的是(我称之为测试没有剔除bug的运气不好)。另一方面,我经常看到如下代码:memset(buffer,0,sizeof(buffer)); snprintf(buffer,sizeof(buffer),“foo is%d”,foo);'清除缓冲区isn'因为它总是会得到一个格式良好的以空字符结尾的字符串。但我猜,安全性比抱歉要好。 – 2013-05-13 18:56:34