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]{};
例如,我按照惯例 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]{};