在 C 语言的 while 循环中,我声明了一个 char[..],每次迭代都必须清除它吗? 例如:
while (clock() < endTime) {
char buf[1000];
memset(buf, 0, sizeof buf); // Is this necessary?
}
缓冲区是否会在循环的每次迭代中自动初始化为全零?我的 memset 是多余的吗?
谢谢
最佳答案
C 语言中的局部对象永远不会自动初始化。您必须提供初始化程序。否则,该对象将包含垃圾。
因此,您的memset
并不是真正的“冗余”。但是,将缓冲区初始化为全零的正确方法是
char buf[1000] = { 0 };
而不是 memset
。 (虽然在这种情况下 memset
也能正常工作,但使用核心语言功能几乎总是比使用库函数更可取)。
是的,如果您在循环体内声明缓冲区,则每次都必须重新初始化它。
当然,真正的问题是:您真的需要每次迭代时都将缓冲区初始化为全零吗?如果是这样,那么您必须每次都这样做。
关于c - 在 C 的 while 循环中,我声明了一个 char[..],我是否必须在每次迭代中清除它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5547641/