报错:error C2229: class ' ' has an illegal zero-sized array 引发的思考
- 问题:
上面是结构体中的成员,值得注意的是结构体的最后一个成员数组就不会显示错误。Why?
我们写一个程序测试一下:
当指定了数组大小为1的时候,发现b和c的地址是连续的:
给b数组开辟了一个int大小的空间。
所以如果不给素组限定大小,那么b和&c的地址就会指向同一处。就会提示错误:
但如果b是结构体最后一个元素就无所谓了:
输出:
- 思考一:
为什么这样是无法赋值的?
报错:
报错:
原因在于,定义结构体的时候,b是一个地址常量,它不能再被赋值。首先,注意不要把数组和指针混淆。指针是一个变量,可以被赋值,而这里的数组b中的"b"是一个地址常量。其次,从实现的角度考虑,数组就是开辟了一段内存空间,用这段空间存放数据,这其中的数据可以更改,但你不能随意挪动数组的位置(即不能随便改变b的值)。
- 思考二:
如果不指定b数组的大小,强行给它赋值会有什么问题?
这段赋值本是没有什么问题的,但是VS在你运行结束之后仍然会提示你:
这里你只给b添加了两个值,可能还没什么影响,但是如果是这样:
就会报Access Violation的错误:
- 思考三:
对于这段能够正常运行的代码,会输出什么?
我们跟踪进main:
先是开辟了一段堆栈空间,填充的内容都是CCCCC...:
将三个数据存放入结构体中:
struct中的这三个成员在栈中是连续排列的。
运行结束:
这里,为什么会输出一堆乱码?
原因在于你给b数组开辟了10个char大小的空间,但是只给其中一个赋值,它里边有一部分被CCCCC填充,而"CCCC"对应的就是“烫烫”...
总之,结构体中的成员,要给出明确的大小,让机器知道给你预留多少空间。
报错:error C2229: class ' ' has an illegal zero-sized array 引发的思考的更多相关文章
- linux使用wkhtmltopdf报错error while loading shared libraries:
官网提示 linux需要这些动态库.depends on: zlib, fontconfig, freetype, X11 libs (libX11, libXext, libXrender) 在li ...
- 发布报错:Error ITMS-90635 - Invalid Mach-O in bundle - submitting to App store
发布报错:Error ITMS-90635 - Invalid Mach-O in bundle - submitting to App store 昨晚上传项目到AppStore,报了这个错,纳尼! ...
- 升级到macOS 10.12 mysqlb报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
系统升级到macOS 10.12后启动mysql后,在终端输入mysql 报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' ...
- inoic start projectname sidemenu报错 - Error: Cannot find module 'lodash._baseslice'
inoic start projectname sidemenu报错 - Error: Cannot find module 'lodash._baseslice' 在公司的电脑上出现过这个错误,后来 ...
- 运行编译后的程序报错 error while loading shared libraries: lib*.so: cannot open shared object file: No such file or directory
运行编译后的程序报错 error while loading shared libraries: lib*.so: cannot open shared object file: No such f ...
- CentOS命令登录MySQL时,报错ERROR 1045 (28000):
CentOS命令登录MySQL时,报错ERROR 1045 (28000): Access denied for user root@localhost (using password: NO)错误解 ...
- android sdk启动报错error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037:
android sdk启动报错error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: 问题原因: ...
- mysql报错"ERROR 1206 (HY000): The total number of locks exceeds the lock table size"的解决方法
1. 问题背景 InnoDB是新版MySQL(v5.5及以后)默认的存储引擎,之前版本的默认引擎为MyISAM,因此,低于5.5版本的mysql配置文件.my.cnf中,关于InnoD ...
- 运行yum报错Error: Cannot retrieve metalink for reposit
http://www.netpc.com.cn/593.html 运行yum报错Error: Cannot retrieve metalink for reposit 今天给Centos通过rpm - ...
- 转:运行yum报错Error: Cannot retrieve metalink for reposit
http://www.netpc.com.cn/593.html 运行yum报错Error: Cannot retrieve metalink for repository: epel. Please ...
随机推荐
- mybatis的insert返回主键
<insert id="insert" useGeneratedKeys="true" keyProperty="id" parame ...
- ECOS-Ecstore mongodb大数据 读写效率优化
转自同功BBS 拆表存取kv <?php /* 经过拆变优化的ECStore mongodb 类 base/lib/kvstore/mongodb.php*/ class base_kvstor ...
- HyperSnap(屏幕抓图工具) 8.11.03 官方简体中文特别版
软件名称:屏幕抓图工具HyperSnap 软件分类:图像捕捉运行环境:WinXP/Win2003/Vista/Win7/Win8/WinALL软件语言:简体中文授权方式:免费软件软件大小:12462K ...
- 进入BIOS SHELL DUMP 命令
LINUX系统 进入SHELL 输入命令 fs1: or fs0: 就进入了U盘目录 然后输入 ACPIRW.efi -d -s dsdt.bat 就会产生结果到U盘 ——————————————— ...
- 项目管理实践【四】Bug跟踪管理【Bug Trace and Management】
首先,向大家说一声抱歉,这篇文章耽误了这么久才和大家见面.至于Bug的跟踪和管理的必要性和好处,我就不在这里说了,下面介绍几款Bug跟踪和管理的软件. 一.BugNET BugNET是一个非常优秀的开 ...
- do-while、while、for做循环算5的阶乘
#include "stdio.h" void main() { ,r=; do { r*=d; d++; }); printf("5的阶乘5!为:%d",r) ...
- windows下更新python报错permission denied
注意退出所有python进程,可能是在使用中导致权限不足以删除
- js 放置 cookie、获取 cookie、删除 cookie
这块TM的删不掉 代码如下: // 自定义 js cookies var mycookie = { // 放置 set : function(name,value){ var Days = 1; // ...
- Chapter 2 Open Book——4
I walked to Biology with more confidence when, by the end of lunch, he still hadn't showed. 经过中午饭之后我 ...
- 第十六节,基本数据类型,字典dict
字典 常用操作: 索引 新增 删除 键.值.键值对 循环 长度 字典由键值对组成,由一个键(名称)和 一个值组成,与列表和元组不同的是里面的元素是有键的(名称) 所以当要打印字典时,打印字典变量加[键 ...