C语言调试常见错误计算机NET_计算机-.NET.pdf
C语言调试常见错误 一、第一类错误分析 1、在使用变量前未定义。2、语句后面漏写分号或不该加分号的地方加了分号.C 语言规定,语句必须以分号结束,分号是 C 语句不可缺少的一部分,这也是和其它 高级语言不同的一点。初学者往往容易忽略这个分号。例如:x=l y=2;修改:x=l;y=2;3、定义或引用数组的方式不对。C 语言规定,在对数组进行定义或对数组元素进行引用时必须要用方括号(对二维数组 或多维数组的每一维数据都必须分别用方括号摇起来),例如以下写法都将造成编译时出错:例如:int a(10);int b 5,4;printf(”dn”,b 1+2,2);修改:int a10;int b54);printf(”dn,b 3);4、混淆字符和字符串 C 语言中的字符常量是由一对单引号括起来的单个字符;而字符串常量是用一对双引 号括起来的字符序列。字符常量存放在字符型变量中,而字符串常量只能存放在字符型数 组中。例如:char num;num=T;修改:char num;num=T;5、在引用数组元素或指针变量之前没对其赋初值。例如:main()int a 6,b,*ptr;b=a 5;*ptr=b;i 修改:main()int a 6=0Z3,4,5,b,*ptr;b=a 5;ptr=&b a 1 6、混淆数组名与指针变量 在 C 语言中,数组名代表数组的首地址,它的值是一个常量,不能被修改。例如,在 以下程序段中,用 a+是不合法的。例如:main()int i9 a 10;for(i=0;K10;l+)scanfC%dr a+);a i i 修改:mainO inti,a 10;int ptr=a;for(i=0;i 修改:fun(float x,float y)float z;定语句必须以分号结束分号是语句不可缺少的一部分这也是和其它高级语言不同的一点初学者往往容易忽略这个分号例如修改定义或引用数组的方式不对语言规定在对数组进行定义或对数组元素进行引用时必须要用方括号对二维数变量在语言中数组名代表数组的首地址它的值是一个常量不能被修改例如在以下程序段中用是不合法的例如修改混淆不同类型的指针若有以下语句则赋值语句是非法的混淆指针说明语句中的号和执行语句中的号设有以下说明语句则结构体变量名若定义了以下结构体类型则赋值语句是错误的二第二类错误分析在用函数给普通变量输入数据时在变量名前漏写地址运算符如在函数调用语句中企图规定输入实型数据的小数位如执行以下语句输入数据时的数据形式与x+;y+;z=x+y;!10s调用的函数在调用前未定义。11、混淆结构体类型名和结构体变量名。若定义了以下结构体类型 student:struct student long int num;char name 20;int age;float score;则赋值语句:student.num=199401;是错误的。二、第二类错误分析 1、在用 scanf函数给普通变量输入数据时,在变量名前漏写地址运算符&。如:scanf(%d%(r,x,y);2、在 scanf函数调用语句中,企图规定输入实型数据的小数位。如执行以下语句:scanf(%6.2f,&a);3、输入数据时的数据形式与要求不符。用 somf函数输入数据时,必须注意要与 somf语句中的对应形式匹配。如:scanf(%d,%d 笃&.&y);若按以下形式输入数据:24 是不合法。数据 2和 4之间应当有逗号。4、输入、输出时的数据类型与所用格式说明符不匹配。例如有以下说明语句:int x=l;float y=2.5;则运行时执行语句 printf(”x=%f,y=%d n”,x,y);将给出与原意不符的结果:(在 TURBO C 2.0下运行)5、混淆“=和 在 C 语言中,赋值运算符,”乂“是关系运算符。6、在不该出现分号的地方加了分号。例如:iF(xy);printf(x is larger than y.n);7、对于复合语句,忘记加花括号。定语句必须以分号结束分号是语句不可缺少的一部分这也是和其它高级语言不同的一点初学者往往容易忽略这个分号例如修改定义或引用数组的方式不对语言规定在对数组进行定义或对数组元素进行引用时必须要用方括号对二维数变量在语言中数组名代表数组的首地址它的值是一个常量不能被修改例如在以下程序段中用是不合法的例如修改混淆不同类型的指针若有以下语句则赋值语句是非法的混淆指针说明语句中的号和执行语句中的号设有以下说明语句则结构体变量名若定义了以下结构体类型则赋值语句是错误的二第二类错误分析在用函数给普通变量输入数据时在变量名前漏写地址运算符如在函数调用语句中企图规定输入实型数据的小数位如执行以下语句输入数据时的数据形式与例如:i=l;a=0;while(i0)break;printfC%dnr;x);while(x!=0);11、使用卄或运算符时易犯的错误。如:mainO(inta 5=1,2,3,4,5,*p;P=a;printfr%dnV(p+);B I I 12、误解形参值的变化会影响实参的值。例如:main()int a=l,b=3;swap(a,b);printf(a=%d,b=%d n 孔 b);swap(x,y)定语句必须以分号结束分号是语句不可缺少的一部分这也是和其它高级语言不同的一点初学者往往容易忽略这个分号例如修改定义或引用数组的方式不对语言规定在对数组进行定义或对数组元素进行引用时必须要用方括号对二维数变量在语言中数组名代表数组的首地址它的值是一个常量不能被修改例如在以下程序段中用是不合法的例如修改混淆不同类型的指针若有以下语句则赋值语句是非法的混淆指针说明语句中的号和执行语句中的号设有以下说明语句则结构体变量名若定义了以下结构体类型则赋值语句是错误的二第二类错误分析在用函数给普通变量输入数据时在变量名前漏写地址运算符如在函数调用语句中企图规定输入实型数据的小数位如执行以下语句输入数据时的数据形式与int x,y;int m;m=x;x=y;y=m;原意想通过调用 swap函数使 a与 b 的值对换,然而,从输出结果可知 a和 b 的值并未 进行交换。定语句必须以分号结束分号是语句不可缺少的一部分这也是和其它高级语言不同的一点初学者往往容易忽略这个分号例如修改定义或引用数组的方式不对语言规定在对数组进行定义或对数组元素进行引用时必须要用方括号对二维数变量在语言中数组名代表数组的首地址它的值是一个常量不能被修改例如在以下程序段中用是不合法的例如修改混淆不同类型的指针若有以下语句则赋值语句是非法的混淆指针说明语句中的号和执行语句中的号设有以下说明语句则结构体变量名若定义了以下结构体类型则赋值语句是错误的二第二类错误分析在用函数给普通变量输入数据时在变量名前漏写地址运算符如在函数调用语句中企图规定输入实型数据的小数位如执行以下语句输入数据时的数据形式与