我想知道这个结构是什么意思
typedef struct _VOLSNAP_NAME {
USHORT NameLength;
WCHAR Name[1];
} VOLSNAP_NAME, *PVOLSNAP_NAME;
我不明白为什么结构有一个NameLengthName后的值长度似乎总是1。
我也不明白为什么WCHAR Name[1]尺寸:should' t
WCHAR Name;
Windows有一个名为ANYSIZE_ARRAY
的定义,您也可以在类似的结构中看到它,其值为1。当编译时不知道数组大小时,可以使用[1]
和[ANYSIZE_ARRAY]
。这个方案早在C99增加对可变长度数组的支持之前就发明了。[0]
可能会更有意义,但它不是合法的语法。
为了处理这些结构,你通常首先调用所需的API来获取数据的大小,然后分配一个足够大的内存块,最后再次调用相同的API,以便它可以填充数据。
参见:
- 为什么一些结构以大小为1的数组结束?