结构体包含大小为零的数组时情况分析
来源:互联网 发布:360 mac如何使用 编辑:程序博客网 时间:2024/05/18 01:42
在分析某代码时,发现某结构体定义为
typedef struct _BUSENUM_PLUGIN_HARDWARE{//// sizeof (struct _BUSENUM_HARDWARE)//__in ULONG Size; //// Unique serial number of the device to be enumerated.// Enumeration will be failed if another device on the // bus has the same serail number.//__in ULONG SerialNo;//// An array of (zero terminated wide character strings). The array itself// also null terminated (ie, MULTI_SZ)//__in WCHAR HardwareIDs[]; } BUSENUM_PLUGIN_HARDWARE, *PBUSENUM_PLUGIN_HARDWARE;
最开始以为sizeof(BUSENUM_PLUGIN_HARDWARE)等于12,因为我认为WCHAR HardwareID[]等效于WCHAR HardwareID[1]。但具体测试时发现其结构体大小为8,即结构体不包含最后一个成员,并且应用层编译器会有警告:
warning C4200: 使用了非标准扩展 : 结构/联合中的零大小数组1> 当 UDT 包含大小为零的数组时,无法生成复制构造函数或副本赋值运算符
如果在结构体附加一个成员(需要内存空间或者另外一个大小为零的数组)
typedef struct _BUSENUM_PLUGIN_HARDWARE{//// sizeof (struct _BUSENUM_HARDWARE)//__in ULONG Size; //// Unique serial number of the device to be enumerated.// Enumeration will be failed if another device on the // bus has the same serail number.//__in ULONG SerialNo;//// An array of (zero terminated wide character strings). The array itself// also null terminated (ie, MULTI_SZ)//__in WCHAR HardwareIDs[]; //__in WCHAR Name[]; __in ULONGulRear;} BUSENUM_PLUGIN_HARDWARE, *PBUSENUM_PLUGIN_HARDWARE;
编译器会报告错误:
error C2229: struct“_BUSENUM_PLUGIN_HARDWARE”有非法的大小为零的数组所以,一个结构体可以包含一个大小为0的数组,但是必须处于结构体末尾,并且其不占用结构体内存空间。
0 0
- 结构体包含大小为零的数组时情况分析
- C++ new大小为零的数组
- linux闲谈-数组长度为零的情况(GNC 扩展)
- 结构体零长数组的妙用及warning C4200:使用了非标准扩展:结构/联合中的零大小数组解决
- 结构体零长度数组的作用
- 结构体零长度数组的意义
- 结构体零长度数组的作用
- 结构体中最后一个数组长度为零
- 关于结构体包含结构体的类型数据大小
- 结构体定义别名时定义为*~~的情况
- CodecInfo为一个结构体,包含两个成员,后面定义了这个结构体类型的一个数组
- 结构体中最后成员为一个数组(长度为零)与一个指针
- 大小为0的数组
- 最坏情况下,合并两个大小为n的已排序数组所需要的比较次数为
- 结构体中的零长度数组
- 去除数组中为零的项
- 一个有关计算结构体数组大小的问题
- 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组
- file_get_contents 无法请求微信https接口的问题
- Hadoop家族系列文章
- mybatis框架(分页的实现)
- flyme by 云 os 系统不显示log解决方法
- LNK1104: 无法打开文件“lua51.lib”
- 结构体包含大小为零的数组时情况分析
- Netty 5用户指南
- java设计模式-代理模式(Proxy Pattern)
- C#反射机制
- Servlet中forward和redirect的区别(转)
- Java要把字符串设计成不可变
- 阅读计算机网络 笔记 (第一章)
- android studio运行安装后,手机上出现两个相同的App图标
- docker registry v2 install run安装运行