C语言 属性WCHAR Name[1]在Windows内核中意味着什么?



我想知道这个结构是什么意思

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的数组结束?

最新更新