admin 管理员组文章数量: 1086019
2024年9月3日发(作者:amplitude粉底)
2010年第l2期 福建 电脑 167
C语言常见错误原因分析及防范
万权性,熊力维,李微
(九江职业大学信息工程学院江西九江332000)
【摘要】:C语言是高等院校计算机、电子等相关专业的的基础课,其使用方便灵活。本文对初学者在
编程过程中经常出现的错误进行列举,分析错误原因,给出错误防范建议,帮助初学者减少及避免该类错
误.提高程序设计水平。
【关键词】:c语言错误类型错误防范
一
、
引言
C语言是目前世界上应用范围最广.使用最多的程
序设计语言,它功能丰富,表达能力强,应用面广,既具
有高级语言的优点.又具有低级语言的许多特点,是一
门很灵活的编程语言 C语言已经成为各高等职业院
校、本科院校中计算机、电子等相关专业的一门专业基
础课
C语言灵活的特点.给编程人员带来了许多方便的
同时,也给程序的调试带来了诸多不便。笔者根据多年
的学习和学生上机过程中的信息反馈.总结分析常见
错误的原因,及解决的方法。
二、基本语法错误
每一种语言都有自已的语法.C语言也不例外.程
序如果没有按照它的语法规则编写就会出错。初学者
由于对语法尚不熟悉.很容易碰到这类错误.常见的语
法错误有:
1.main函数错误
例:
main
prinff(“Hello!The C program.”);
此程序有两处错误。不管是有参函数,还是无参函
数,函数名后的一对“()”及标识函数体的“{}”是不能
省略的。正确书写为:
main0
{prinff(“Hello!The C program.~);)
2.使用了未定义变量
C语言规定,变量的使用必须“先定义,后使用”。并
且,C语言对变量的大小写敏感.忽略变量的大小写也
将导致这种错误。
例:
main0
{int a=l,b;
c=a+2:
B=a+3:
prinff(”%d,%d”,c,b);J
在此程序中.第一处错误是变量c没有定义.却在赋值
语句中使用了:第二处是变量b定义的时候是小写,在
使用时变成了大写。编译时,程序将报错。
3.变量类型不符合运算要求
例:
main()
{float a,b;
prinff(”%d”,a%b);)
C语言求余运算符“%”要求变量的类型为整型。在
此程序中,变量a和b为实型,不符合运算符的要求,
编译时将报错
4.动态定义数组
C语言中数组元素的个数不允许动态定义.即数组
的长度不能依赖运行过程中变量值的变化而变化。下
面的数组定义是错误的:
例:
int n:
scanf(“%d”,&n);
int array[i];
三、概念混淆导致的错误
对于一些相似的运算符号.或者相近的定义。初学
者常因概念不清楚导致逻辑上出错.较语法类错误更
难排除,往往需要仔细检查和分析才能发现。
1.“=”与“:=”号
C语言中.用于判断两数是否相等的运算符是
“
”
==
,
而“=”是赋值运算符。例:if(a=O)b=2;该语句在编
译时不会报错,但b=2;语句永远不会执行,应该改为:if
(a==O)b=2;,当a的值为O时,b赋值2。
2.误用“&”号
“&”是取地址运算符,在学scanf函数时,易漏写;
在学字符数组时,又常常多添加。
例:int a;scanf(“%d”,a);是错误的,应该为scanf(“%
d”,&a】;“&a”表示变量a的地址。char str[20];scanf(“%
s”
,
&str);是不合法,因为数组名就是表示地址,此时要
去掉“&”符号。
168 福建电脑 2010年第12期
3.混淆数组首地址与指向首地址的指针变量
例:
为数组长度减l
例:
int arr[3]={2,4,6};
prinff(“%d”,arr[3]);
for(i-0;i<3;i++)
程序输出的结果不是6.数值6是存放在数组元素
 ̄ntf(”%d”,¥arr++):
该程序试图通过改变afT使指针下移.以读取数组
arr[2]中的。
3.格式化串溢出
中元素。但是aft是数组名,只表示数组的首地址,是不
能移动的.此时可用一个指向首地址的指针变量来读 prinff0函数要求格式字符串和各输出项在数量和
取,程序修改为:
类型上一一对应,如果不对应,就会发生错误。
例:
int i,arr[3]={0,1,2J, p;
p=arr;
int i,arr[3]={0,1,2};
for(i=0;i<3;i++)
prinff(”%d”, p++);
4.指针数组与数组指针
printf(”%d\n%c”,a);
此程序只有一个输出项.但有两个格式字符.依然
会输出两个值。尽管“%c“没有提供输出项.它还是会
如果数组中的每个元素都是指针类型数据.则为 输出一个值
五、错误防范
指针数组.定义格式为:
类型说明符 数组名『数组长度n];
例:int 4】;
程序的错误会给程序带来不可预期的后果,严重
的还会造成死机、系统重启等。从上面列举的错误种类
表示定义了~个长度为4的指针数组.每个数组 来看,只要采取一些防范措施,是可以减少和避免的。
1.多看多练.避免初级错误。对于语法类和概念混
元素都可以指向一个int型变量。如果写成int( p)[4];
则表示定义了指向二维数组的指针变量P.P可以指向
淆导致的错误.大多是由于对C语言不熟悉.只要平时
列数为4的二维数组。书写形式上只相差一对括号,但
多加练习.随着熟练程度的提高,这类错误自然就减少
意义完全不同,用法也不同。
四、数据溢出导致的错误
了。
2.编写的程序要结构清晰,简单易懂。养成良好的
C语言对数组和指针的引用不进行边界检查.如果
编程习惯。编写程序时尽量使用标准库函数,用括号来
向一个预定大小的内存写入超过其大小的数据.运行 避免二义性等良好的编程习惯。初学者往往以编出别
时就会发生不可预料的溢出错误,并且很难发现。初学
人看不懂的程序为荣。这是万万要不得的,程序要简
者常出现以下三种溢出错误
1.数据超出表示范围
洁,避免简单问题复杂化。
六、结束语
以上只是列举了部分常见错误及防范措施.实际
义的int型数据范围为一32768~32767.超过这个范围
编程中所遇到的错误远不止这些.只要按照软件编程
规范,多上机练习.排除错误的能力就会大大提高,错
的int型数据.将出现溢出错误。
例:
误出现的几率就会大大降低。
int a=32767,b;
b=a+1:
不同类型的数据,表示的范围不同。ANSI标准定
参考文献:
1】谭浩强.C程序设计(第二版).清华大学出版社,1999
程序运行后。变量b的值不是32768,因为超过了
【
【2】蒋腾旭.C语言程序设计教程.北京航空般天大学出版社,
它的表示范围.可将b的类型指定为long型。
2.数组下标越界
[31刘春英.C语言中溢出错误分析和防范.菏泽学院学报.2008
数组元素的下标由0开始,所以下标的最大取值
2009
(上接第159页)
稳定版本.问题都是可以解决的。最终升级的效果很
显快很多。我院HIS系统所有的子系统全部基于Or-
好,特别是64位平台的建立,满足了今后相当长一段 aclel0g主服务器.服务器CPU利用率一般在2%一
时间内硬件升级的需要。系统升级完成后,运行稳定,
下,最高峰时5%,数据库的命中率在99.9%122_12。总的
从未宕机,性能大幅度提升,特别是针对摆药、查询、统 来说,此次升级过程非常成功。
计一系列针对操作大量数据的应用上.速度比以前明
版权声明:本文标题:C语言常见错误原因分析及防范 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1725339671a885279.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论