ZeroMemory 是 windows 等同于 null 终止缓冲区吗?

Is ZeroMemory the windows equivalent of null terminating a buffer?

例如,我按照惯例 null 终止缓冲区(将缓冲区设置为零),示例 1 如下:

char buffer[1024] = {0};

并且使用 windows.h 库我们可以调用 ZeroMemory,示例 2:

char buffer[1024];
ZeroMemory(buffer, sizeof(buffer));

根据 Microsoft 提供的文档:ZeroMemory Fills a block of memory with zeros. 我想在我的 windows 应用程序中保持准确,所以我想有什么地方比堆栈溢出更好。

这两个例子在逻辑上是等价的吗?

是的,这两个代码是等价的。在这两种情况下,整个数组都用零填充。

char buffer[1024] = {0}; 的情况下,您仅将第一个 char 元素显式设置为 0,然后编译器隐式 value-initializes 剩余的 1023 char 个元素到 0 给你。

在 C++11 及更高版本中,您可以省略第一个元素值:

char buffer[1024] = {};
char buffer[1024]{};