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

标签 c memory-management struct

在 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/

相关文章:

循环/结构中的 C++ 函数

c - 分配多个相同类型的数组

mysql - 删除后数据库内存浪费

c++ - 如何将 char 数组中的值与另一个 char 进行比较

delphi - 在delphi中分配一个字节数组并随后释放它

linux - 如何计算从同一父进程派生的进程使用的总物理内存?

c++ - 创建模板化结构的 std::list (C++)

data-structures - Julia:自引用和递归类型

C - while循环不会退出

c - ADC 中断未被调用