| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3703 人关注过本帖, 1 人收藏
标题:C语言二维字符数组使用的误区
只看楼主 加入收藏
zhuoyue123
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-9-4
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:5 
C语言二维字符数组使用的误区
误区:在C语言的教学中,发现很多学员老出现这个问题,在定义字符二维数组上,这样定义char buf[][50]={0};后面使用buf[0],buf[1]....总觉得有无穷无尽可以使用。调试无果:一开始,学员用的没有问题,等项目代码多了,系统变大了,就出现些莫名其妙的问题,调试半天就找不出根源。原因:实际上就出在这个定义上,这样定义变量就像给系统埋了个定时炸弹,留下隐患。我们说,定义变量后系统就会开辟一定的内存空间,char buf[][50]={0},这样的定义实际上就只有一个50个字节的内存空间,你若不信,可用sizeof测试下。那为什么还能使用buf[1]呢?系统怎么不报错呢?首先数组是特殊的指针,buf[0]的首地址是buf[0][0],buf[1]的首地址系统就会推算为buf[0][0]+1*50,当你用strcpy(buf[1],"student");系统将会从buf[1]的首地址开始存“student”的数据,但是这些数据是不受保护的,因为buf的合法空间是50个字节,也就是系统会认为后面的空间是闲置的,所以当系统变大,变量使用的多时,内存区不够使用,或刚好使用这块区域,系统读取数据就会混乱,造成系统崩溃,并且这种错误系统报的错经常是不会指向这里的,所以调试就会很困难,再者,VC本身不检查下标的越界,所以就很难找出错误的根源。
搜索更多相关主题的帖子: 教学 C语言 测试 
2012-09-04 11:23
stophin
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:227
专家分:618
注 册:2010-3-26
收藏
得分:4 
做大项目的时候一般采用可变数组或者定义数组维度宏
2012-09-04 14:11
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:4 
我感觉变长数组应用的还是比较少。

数组越界在 c 里本来就是一个复杂问题。不管多少经验,多少小心,最后还是可能会在这上面出问题。
2012-09-05 00:47
bccn250
Rank: 5Rank: 5
等 级:职业侠客
帖 子:154
专家分:379
注 册:2010-5-25
收藏
得分:4 
嗯,真是受益匪浅啊,
2012-09-05 01:53
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:4 
C不检查超界和数据溢出,是臭名昭著的啦。经验更丰富的高级C程序员,多多少少都会栽在这上面,与新手的差别,无非是发现的快不快、能不能迅速改好而已。

授人以渔,不授人以鱼。
2012-09-05 02:00
zhangqi_gsts
Rank: 6Rank: 6
来 自:甘肃天水
等 级:侠之大者
威 望:1
帖 子:227
专家分:457
注 册:2011-3-27
收藏
得分:4 
觉得定义数组且要省略维数时,就得把这个数组全部初始化,而且当“常量”来看,后面只能引用,不能修改,如果后文要修改的话最好还是不要省略维数。
2012-09-05 08:48
快速回复:C语言二维字符数组使用的误区
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016965 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved