能力值:
( LV7,RANK:113 )
|
-
-
2 楼
#include "stdafx.h"
#include <windows.h>
struct Msg
{
char nothing;
int len;
char buf[1];
};
int _tmain(int argc, _TCHAR* argv[])
{
struct Msg* msg = (struct Msg*)new char(20);
int size = sizeof(msg->len) + sizeof(msg->nothing);
printf("size:%d\n", size); // size = 5
size = FIELD_OFFSET(struct Msg, buf);
printf("actual size:%d\n", size); // size = 8
return 0;
} 如果再补充一下可变数组配合FIELD_OFFSET宏一起使用的例子就更好了!
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
typedef struct _PROTOCOL_DATA {
UINT Length;
BYTE Buffer[];
} PROTOCOL_DATA; 个人习惯写空白,写个 0 感觉怪怪的。微软头文件中的默认都是 1。 在计算偏移量时,写成员名 Buffer 即可,不用 Buffer[0]。
标准 C 库已经包含 offsetof 这个宏:
offsetof(PROTOCOL_DATA, Buffer); 包含 windows.h 的情况下可以用:
FIELD_OFFSET(PROTOCOL_DATA, Buffer);
|
|
|