memsetting初始化缓冲区的原因是什么

时间:2013-05-13 17:58:12

标签: c initialization memset

在浏览维基百科后,我偶然发现the following code example将char缓冲区初始化为0,但在使用之前memset将其设置为0。这有必要吗?如果是这样,为什么?我问的原因是我不是专家,这个例子清楚地表明这是编码人员在/* Really initialized to zeroes */上的评论“memset”的意图,而不是“/* initialized to zeroes */”关于初始化。

编辑:注意,我已经在维基百科页面上回滚了导致这种情况的编辑,因此它在链接中不再可见。

2 个答案:

答案 0 :(得分:10)

char buffer[5] = {0};  /* initialized to zeroes */

/* some declaration / statements, but no access to buffer object */

memset ( buffer, 0, sizeof buffer); /* Really initialized to zeroes */

在上面的代码中,对memset的调用完全没用。 buffer已保证已初始化为0

答案 1 :(得分:2)

跟进ouah的回答。如果你有

char buffer[5] = { 0 } ;

int main(int argc, char **argv)
{
    memset ( buffer, 0, sizeof buffer);
    ...

可能有一个例外:如果真的执行低级C编程(没有操作系统)并且在没有完全工作环境的情况下直接调用C程序,那么buffer在这种情况下,数组可能无法正确初始化,因为缺少必要的初始化代码(在main之前运行的代码)。

在这种情况下,它是相反的:初始化是无用的(因为它在这个特定环境中不起作用)并且memset是必需的。

但正如我所说:这实际上只发生在极低级别的C编程中,实际上是环境中的一个错误,它为您提供了一个非C符合环境。