在浏览维基百科后,我偶然发现the following code example将char缓冲区初始化为0,但在使用之前memset
将其设置为0。这有必要吗?如果是这样,为什么?我问的原因是我不是专家,这个例子清楚地表明这是编码人员在/* Really initialized to zeroes */
上的评论“memset
”的意图,而不是“/* initialized to zeroes */
”关于初始化。
编辑:注意,我已经在维基百科页面上回滚了导致这种情况的编辑,因此它在链接中不再可见。
答案 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符合环境。