C程序调试中常见错误分析-

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2009年4月 第26卷第2期
长治学院学报
Jou订lal of changzhi l Jnivers畸
A”,2009
V01.26.No.2
C程序调试中常见错误分析
陈 鑫
(长治学院计算机系,山西长治046011)
摘要:c语言初学者在程序调试过程中经常会遇到一些编译错误。通过示例剪l举了这些常见错误,并对出错原因进行 了分析。 关键词:c程序;调试;编译
执行到其后的第—个分号为止,因此当有多个语句需要执行 时,必须将这些语句组合成复合语句,即用花括号将这些语 句括起来。因此上例应改为: whil娟<=lo) l
a=b+c:
prin甙”\II%d'

%d,%dI.,柚,c);
该程序能顺利通过编译运行,但运行结果不会是我们所 期望的“20,lO,10”。这是由于在C语言中,形如“int
(责任编辑
K9y wDrds:C
・34.
proced哦s;debug画ng;蚴piler
万方数据
iIIt
[2]王柏盛.c程序设计[M].北京:高等教育出版社,2004.
8—10.
m缸=32767。miII=一32768;
[3]田淑清.c语言程序设计[M].北京:高等教育出版社,
2008.36—37.
prir缸“%d,%扎”,Ⅱm+1,min-1);
} 该程序的运行结果为:一32768,32767,这显然不是正确 结果。原因在于:在计算机中数值是用补码表示的,32767的
int
for(i=0;i<5;i++)∞龃f(I.%dII;p++);
for(i=0;i<5;i++)呻似”%d”,a【i】);
} 该程序可以顺利编译运行,但输出结果并非是由键盘输 人的值,而是随机值。这是因为在程序中没有对指针变量p 赋予一个确定的值,因而输入的5个值将会被存放到未知的 存储单元中,而数组a并未得到所需要的值,可改为“im 【5】,i,枣P=a;” 6输出格式控制不当 例肌IiII() {
2005.351—353.
prin甙“f=%d,i=%ld”,f。i); l 该程序的运行结果并非是我们所期望的“f-12,i-一5”。 这是由于f是浮点数,在此却按整型输出,出现错误;而i为 负数。在用补码表示时。其最高位为l,在用长整型输出时
其前面加了两个字节,从而造成这种情况。可改为“p血Ⅱ
(“f-%.0f,i-%d,,,f,i);”。 7数值越界 例Illain() I
中图分类号:1玛9l
文献标识码:A
文章编号:1673—201412009)02—0033—02
C语言是应用较广泛的一种程序设计语言,其程序格式 灵活、简洁、代码执行效率高。但由于其语法限制不严,且采 用了一些用以提高执行效率的措施,因而在调试时经常会出 现莫明其妙的错误,这种错误需要仔细检查和分析才能发 现。本文通过示例,对C语言初学者经常会出的一些错误的 原因进行了具体分析。 1变量未赋值 例rnailI() I
iIlt
Hale Waihona Puke Baidu
3复合语句未加花括号 例如:求10 1
int i-l,伍c=l;
while(i<=lO)
‰商虬+i:
i++:
该程序段运行后将进人死循环。进入死循环的原因在于 whik语句中i的值没有被改变,即“i++”没有在循环体语句 中执行。这是由whde语句的执行过程决定的。wh讹语句只
a,b,c=lo;
Abst髓d:C language l朗me璐,in tIle proee鹪of
debugging,wiu山ayB
tlle
reasons
come acmss∞r舱errors
c哪piled
郭建军)
by
open—ended list 0f
t}Ie眈cor硼帆err0玛,嘶stakes锄d
we陀卸alyzed.
l 4数组下标越界 例main()
Iint i;
st“c
int
af5】.Il,2,3,4,5l;
‘盯(i=l;i<=5;i++)
p咖砥“%d”,a【i】);
} 执行结果为:2
3 4 5
x(为一随机值),而不是:l
2 3 4
5。原因在于c语言规定:定义时用a【5J表示a数组有a【01到
a【4供五个数组元素,数组的下标最大值为4。但是C编译系
[4]王明福.c语言程序设计教程[M].北京:高等教育出版 社.2004.218—220.
Common Errors in the Process of C Procedures
CHEN Xin
(Depanment of Computer science,Ch卸gzhi UrIiVells畸,Changzhi ShaI】Ixi,046011)
a,b,
k而c}i:
i++:
c=10;”这样在定义时给变量赋值的语句,只给最后一个变量 而不是所有的变量赋值,这就造成了变量a和b并没有被赋 值。 但是也不能写作“int a-b=c=10;”的赋值语句,因为这违 反了变量先定义后使用的原则。 2混淆“=”和“==” 例缸x=3)研n矾“x等于3”); 运行时.无论x为何值,均输出。x等于3”。程序设计者 显然不是为了这个目的。这是因为在c语言中“=”是赋值运 算符,“==”才是关系运算符“等于”。在此语句中,x=3为赋 值表达式,其值为3,在C语言中永远为真。因而无论x为何 值,运行结果均为“x等于3”。而且由于习惯的影响,程序设 计者也不易发现。
n∞t f=12.3456:
iIlt i_一5:

i,j;
∞a州“%d,%d”,&i,&j); 矾(i>5)II(¨j>4))P血砥“%d,%d”,i,j);
} 该程序运行时,若输人“3,5”,则运行结果为“3,6”;而当 输入“6,8”时,则运行结果为“6,8”。这是因为在条件语句中。 由于“i>5”在成立时会造成其后的“++j>4”不被执行。这样当 “i>5”成立时j的值没有改变,而当“i>5”不成立时,j的值才 会加l。因此,在C程序中,应尽量不要在逻辑运算语句中改 变变量的值,以免产生不确定的结果。 以上我们通过示例列举了C语言初学者经常易犯的一 些错误并对出错原因进行了分析。这对于学好c语言是大有 裨益的。C语言初学者只有清楚理解C语言的语法规范,了 解c语言编译程序对于各种情况的处理方法,才能避免或减 少在程序调试时所出现的逻辑错误,提高自己的程序调试能 力,从而真正提高自己编写程序的能力。 参考文献: [1]谭浩强.c语言程序设计[M].北京:清华大学出版社,
11llllll,加1后变为:10000000
00000000。这恰好是一32768的补码。同样,一32768减1后的 llllllll,又恰好是32767的补码。因此
在程序中.当运算结果可能超出整型数的范围时.一定要将 其转换成长整型,否则将得不到正确结果。 a【5】,i,~; 8逻辑运算未被执行 例main() I
统对数组下标越界不作检查,这就造成了该程序可以顺利编
收稿日期:200卜11一17
作者简介:陈鑫(1976一),女.山西长治人,讲师,主要从事信息技术研究。
-33・
万方数据
长治学院学报
译运行,但a【5】的值却是不固定的。 5指针变量没有初始化 例咄IirI() {
i|It
补码为:0111llll 补码为:01111lll
相关文档
最新文档