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。总的 

从未宕机,性能大幅度提升,特别是针对摆药、查询、统 来说,此次升级过程非常成功。 

计一系列针对操作大量数据的应用上.速度比以前明 


本文标签: 错误 数组 语言 变量 程序