16、混淆字符数组与字符指针的区别。例如:- void main()
- {
- char str[4];
- str="computer and c";
- printf("%s\n",str);
- }
复制代码 str是数组名,代表数组首地址。在编译时对str数组分配了一段内存单元,因此在程序运行期间str是一个常量,不能再被赋值。应把“char str[4];”改为“char *str;“,此时str是指向字符数据的指针变量。
17、在引用指针变量之前没有对它赋予确定的值。例如:
- void main()
- {
- char *p;
- scanf("%s",p);
- ...
- }
复制代码 没有给指针变量p赋值就引用它,应改为- void main()
- {
- char *p,c[20];
- p=c;
- scanf("%s",p);
- ...
- }
复制代码 先根据需要定义一个大小合适的字符数组c,然后将c数组的首地址赋给指针变量p,此时p有确定的值,指向数组c。再执行scanf函数就没有问题了,把从键盘输入的字符串存放到字符数组c中。
18、switch语句的各分支中漏写break语句。
19、混淆字符和字符串的表示形式。单撇号' '是用来存放单个字符的,双撇号" "是用来存放字符串的。
20、使用自加(++)和自减(--)运算符时出现错误。例如:*p++的作用是先输出p的原指向值,然后p再加1;*(++p)的作用是先把p加1,然后再输出p当前所指向的值。
21、所调用的函数在调用语句之后才定义,而又在调用前未声明。
22、对函数声明与函数定义不匹配。
23、在需要加头文件时没用用#include去包含头文件。例如:
程序中用到fabs函数,没有用#include<math.h>
程序中用到输入输出函数,没有用#include<stdio.h>
程序中用到字符串函数,没用用#include<string.h>
24、误认为形参值的改变会影响实参的值。
25、函数的形参和实参类型不一致。
26、不同类型的指针混用。
27、没有注意函数参数的求值顺序。
28、混淆数组名与指针变量的区别。例如:- void main()
- {
- int i,a[5];
- for(i=0;i<5;i++)
- scanf("%d",a++);
- ...
- }
复制代码 程序企图通过a的改变使指针下移,每次指向欲输人数据的数组元素。它的错误在于不了解数组名代表数组首地址,它的值是不能改变的,用a++是错误的,应当用指针变量来指向各数组元素。即:- int i,a[5],*p;
- p=a;
- for(i=0;i<5;i++)
- scanf("%d",p++);
复制代码 或- int a[5],*p;
- p=a;
- for(p=a;p<a+5;p++)
- scanf("%d",p);
复制代码 29、混淆结构体类型与结构体变量的区别,对一个结构体类型赋值。
30、使用文件时忘记打开,或打开方式与使用情况不匹配。此外,有的程序常忘记关闭文件,虽然系统会自动关闭所用文件,但可能会丢失数据。因此必须在用完文件后关闭它。
31、在深入使用C语言后,还会出现其他一些更深入、更隐蔽的错误。例如语法错误、逻辑错误、运行错误等。
|
|