在C中的while循环中,我声明了char [..],我是否必须在每次迭代时清除它?

Chr*_*ris 1 c struct memory-management

在C中的while循环中,我声明了char [..],我是否必须在每次迭代时清除它?例如:

while (clock() < endTime) { 
    char buf[1000];
    memset(buf, 0, sizeof buf); // Is this necessary?
}
Run Code Online (Sandbox Code Playgroud)

缓冲区是否会在循环的每次迭代中自动初始化为全零?我的memset是多余的吗?

谢谢

AnT*_*AnT 7

C语言中的本地对象永远不会自动初始化.你必须提供一个初始化器.否则,该对象将包含垃圾.

所以,你memset并不是真正的"多余".但是,将缓冲区初始化为全零的正确方法是

char buf[1000] = { 0 };
Run Code Online (Sandbox Code Playgroud)

而不是memset.(虽然在这种情况下memset也可以使用,但使用核心语言功能几乎总是优于库函数).

是的,如果您在循环体内声明缓冲区,则必须每次都重新初始化它.

当然,真正的问题是:每次迭代时,你真的需要一个初始化为全零的缓冲区吗?如果是这样,那么每次都必须这样做.