PROCESSENTRY32 .dwSize 和 sizeof

问题描述 投票:0回答:3

我读了这两个关于每个“函数”功能的解释,虽然它们看起来是相同的,但它们不输出相同的值:

dw尺寸:

“结构的大小,以字节为单位。”

尺寸:

“sizeof(x) 返回变量或类型 x 占用的内存量(以字节为单位)”

我的代码:

PROCESSENTRY32 entry;
cout >> entry.dwSize >> endl;
cout >> sizeof(entry) >> endl;

为什么

entry.dwSize
sizeof(entry)
打印时得到的值不一样?根据上面的描述,它们都应该给我条目的大小(以字节为单位)。

c++ size byte
3个回答
0
投票

来自 PROCESSENTRY32 的 MSDN 文档

dw尺寸
结构体的大小,以字节为单位。在调用 Process32First 函数之前,请将此成员设置为 sizeof(PROCESSENTRY32)。如果不初始化 dwSize,Process32First 会失败。

因此

dwSize
应该等于
sizeof(PROCESSENTRY32)
,但是创建
struct
不会初始化其成员,因此在设置它们之前,所有成员中都会有垃圾。


0
投票

当您创建一个结构时,它要么用 0 字节初始化,要么随机初始化。当你查看docs时,你会发现在使用它之前你必须自己填写dwSize。


0
投票

你混淆了两个完全不相关的事情。

PROCESSENTRY32::dwSize
是一个数据字段,you 应该将其初始化为接收者
PROCESSENTRY32
结构的大小。您有责任将其设置为正确的值。它不会神奇地自行设置。

即你应该做的

PROCESSENTRY32 entry;
entry.dwSize = sizeof entry;
...

在尝试将

entry
传递给任何 WinAPI 函数之前。

这就是文档所说的意思,

dwSize
是“结构的大小,以字节为单位”。

© www.soinside.com 2019 - 2024. All rights reserved.