黑马程序员技术交流社区
标题:
C语言常见错误分析(二)
[打印本页]
作者:
54hxd52lj
时间:
2014-6-1 14:49
标题:
C语言常见错误分析(二)
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语言后,还会出现其他一些更深入、更隐蔽的错误。例如语法错误、逻辑错误、运行错误等。
作者:
★Joean_Zhou
时间:
2014-6-2 07:39
好用心的说呢。。。加油!!
作者:
54hxd52lj
时间:
2014-6-2 09:02
★Joean_Zhou 发表于 2014-6-2 07:39
好用心的说呢。。。加油!!
谢谢,我会继续努力地。:D
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2