作者:袁甲2012_498 | 来源:互联网 | 2023-05-18 17:00
__packedstructusb_key_descriptor{__u8bLength;__u8bDescriptorType;__u8tTKID[3];__u
__packed struct usb_key_descriptor {
__u8 bLength;
__u8 bDescriptorType;
__u8 tTKID[3];
__u8 bReserved;
__u8 bKeyData[0];
}; __attribute__((packed));
请问linux中为什么在此结构体中有0个元素的数组__u8 bKeyData[0];
这个有什么作用?
4 个解决方案
google 柔性数组 或 flexible array
http://blog.csdn.net/supermegaboy/archive/2009/11/23/4854939.aspx
看上面的链接吧,大牛写的。
GNU C允许零长度数组,在定义变长对象的头结构时,这个特性非常有用。
struct var_data s
{
int len;
char data[0];
};
char data[0]仅仅意味着程序中通过var_data的结构体实例的data[index]成员可以访问len之后的第index个地址,并没有为data[0]分配内存。
假设struct var_data的数据域保存在struct var_data紧接着的内存区域,通过如下代码可以遍历这些数据:
struct var_data s;
...
for (i=0;i
{
printf("%02x",s.data[i]);
}