常见C程序错误
- 标识符的大小写有区别
int a = 5;
A = a + 1;
C语言默认同一个字母的大写和小写形式代表不同的字符。习惯上,符号常量名用大写,变量名用小写。
-
忽略变量的类型导致的运算不合法
例如浮点数a和b不能进行取余操作。 -
字符常量和字符串常量混淆
字符用单引号,字符串用双引号。 -
引用未初始化的变量
未初始化变量的值是随机的,使用这些数据会造成不可预料的后果。 -
”=“和”“
”=“是赋值运算符,”“是关系运算符 -
少分号或多分号
分号是C语句中不可缺少的一部分,语句末尾必须有分号。 -
scanf和printf函数的使用问题
调用scanf函数时地址表列中的变量缺少”&“。
调用scanf函数时输入数据的格式问题。
调用printf函数时输出表列中的变量多写了”&“。
调用printf函数时输出数据的格式问题。 -
switch语句中漏写break
由于case只起标号作用,而不起判断作用,因此没有case后面都应该加break -
数据溢出
C程序中的数据都有类型属性,每一种类型的数据都有其取值范围限制。因此,在程序执行过程中,若运算结果超出变量的取值范围,则由于溢出而表现为运算结果错误。 -
定长数组和变长数组
定长数组: int a[10];
变长数组:
int n;
int arr[n]; //并非所有的C编译系统都支持
可采用动态内存申请的方法并用指针保存内存空间的地址:
int *ptr;
ptr = (int *)malloc(n*sizeof(int));
-
数组下标的有效范围
数组元素的下标值由0开始,直到”元素个数“减去1,引用数组元素时以”元素个数“作为下标会导致越界访问问题。 -
混淆数组名与指针变量
数组名代表数组的首地址,它的值是一个常量,不能被修改。如果a为数组名,那么a++就是非法的。 -
使用指针的常用问题
1)内存泄漏:编程时注意malloc和free的配合使用
2)空指针:空指针在C程序中由特殊的意义,通常用来判断一个指针的有效性。
3)野指针:指已经释放掉的内存指针。
释放内存后立即把对应指针置为空值(即p = NULL),这是避免野指针常用的方法。
4)返回指向临时变量的指针
5)试图修改常量