C语言程序设计初学者常犯错误集锦
C语言程序设计中的常见错误和解决

C语言程序设计中的常见错误和解决在C语言程序设计中,很多初学者经常会遇到一些常见的错误。
这些错误可能是语法错误、逻辑错误或者是其他一些常见问题导致的。
本文将介绍一些经常出现的C语言程序设计错误,并提供相应的解决方法,帮助读者更好地理解和掌握C语言编程。
一、语法错误1. 括号未匹配括号未匹配是C语言中常见的语法错误之一。
在编写代码时,经常会使用到括号,如if语句、for循环等。
如果不小心忘记关闭某个括号,就会导致括号未匹配的错误。
解决方法:仔细检查代码中的括号是否匹配,并确保每个左括号都有相应的右括号。
2. 分号丢失分号丢失是C语言中另一个常见的语法错误。
在C语言中,分号用于分隔语句,如果遗漏了分号,编译器就无法识别出语句的结束。
解决方法:检查每一行语句的末尾,确保每个语句都以分号结尾。
3. 变量未声明在使用变量之前,必须先声明该变量。
如果没有先声明变量就直接使用,编译器将无法识别该变量,从而报错。
解决方法:在使用变量之前,先进行变量声明。
二、逻辑错误1. 循环控制条件错误在编写循环语句时,控制条件的错误是常见的逻辑错误。
如果循环的控制条件错误,循环可能无法正常结束或者根本无法执行。
解决方法:仔细检查循环的控制条件,确保条件符合预期,并在循环体内更新循环变量。
2. 数组越界访问在C语言中,数组的索引从0开始,通过索引访问数组元素时,如果索引超出了数组的范围,就会导致数组越界访问的错误。
解决方法:确保数组索引在正确的范围内,避免越界访问。
如果需要遍历数组,可以使用循环来控制数组的访问范围。
三、其他常见问题及解决方法1. 变量类型不匹配在赋值操作或者表达式计算时,如果不同类型的变量之间进行操作,则会导致变量类型不匹配的错误。
解决方法:确保操作的变量类型相同或者进行强制类型转换,以保证变量类型的匹配。
2. 内存泄漏在C语言中,手动分配内存的操作是常见的。
如果分配了内存空间,但在使用完毕后未及时释放,就会导致内存泄漏。
C语言初学者编程的常见错误及分析

多. 编程语 言的语法规则是很严格的 , 即使 出现一
丝错 误 也 使得 整 个 程 序不 能 运行 或 运行 出错 误 的 结果 , 这 就要求 教 师在讲课 时突 出强调 语法 格 式与
种 种注 意事项 .
字 符 常量是 由一 对单 引号 括起 来 的单个 字 符 , 字 符 串常 量 是一 对 双 引号 括 起来 的字符 序 列 . C规 定 以’ \ 0 ’ 作 字符 串结 束 标 志 , 它是 由系统 自动加 上 的, 字符 串“ a ” 实 际上 包 含 两个 字 符 : ’ a ’ 和’ \ 0 ’ , 所
辑 上与题 目要求 不符 . 逻辑 错 误要 比语法 错误 难 排
引用变 量 一定 要 保证 其 值 固定 , 而 上例 中 的 a
和 b都 没有 初值 . 又如 :
i n t x, y ;
除, 往往要求用户有很扎实的基础. 经过 多 次教学 经验 的积 累 , 不 难 总结 出一 些初
中图分 类号 : T P 3 1 2
1 引 言
文献 标识 码 — 2 6 0 X( 2 0 1 3 ) 0 9 — 0 0 1 6 — 0 4 两 个不 同的 变量 名 ,从 而显 示 变量 A未定 义 这 一
作 为 一 个 长 期从 事 C语 言 教 学 的教 师 来 说 ,
错 误提示 信 息. 2 . 1 . 2 将 字 符常量 与 字符 串常量混 淆 . 如:
c h a r c ;
C= ”a I I :
经 过多 次 的教学 过 程 ,发 现初 次接 触 C语 言 的相 当一部 分 同 学入 门 比较慢 ,往往 跟 不 上老 师 的节 奏, 导 致 知识 讲 授越 多 问题堆 积 越 多 , 编 程错 误 越
黑马程序员C语言教程:初学者或是开发人员常遇到的c语言陷阱

初学者常遇到的c语言陷阱在初学者学习编程的过程中的会遇到一些经常会犯的错误,也许在我们成长起来之后会觉得这些错误实在太低级,但是在牛掰的大虾也是从菜鸟过来的,针对于初学者下边总结了一些我们会经常遇到的陷阱,希望对菜鸟们有帮助:正题:陷阱1:忽略大小写的区别#include<stdio.h>void main(){int a=10;a+=a;printf("%d\n",A);}这个很简单,是基础,c语言变量区分大小写。
代码中的a与A不是同个变量,编译出现A 没定义的错误。
陷阱2:“{}”与“()”使用不当造成错误#include <stdio.h>void main(){int i,j;int a[2][3]={(1,2,3),(4,5,6)};printf("array a:\n");for(i=0;i<=1;i++){for(j=0;j<=2;j++){printf("%d",a[i][j]);}printf("\n");}}}程序结果不能正常输出数组每个元素,编译{(1,2,3),(4,5,6)};时,先进行括号内的逗号运算(取逗号最后的数值),编译生成{3,6};其它元素为0。
正确的写法:{{1,2,3},{4,5,6}};陷阱3:在if,while,#include,#define,for后直接加分号,如for(int a=1;a<10;a++);如果是while,程序一般执行死循环,int a=1;while(a);如果是if,判断语句无效果,比如。
if(a>0);a=-1;无论a是否大于0,结果都是a=-1;如果是#include,程序编译的时候提示错误,无法引用库文件;如果是#define,比如#define a 200;程序在预编译的时候,200;包括分号一同被替换进程序,程序不可能正常编译如果是for循环,跟if一样,事与愿违,循环做无用功,本想循环的printf语句只执行一次。
C语言报错整理大全

C语言错误代码及错误信息错误释义error 1: Out of memory 内存溢出error 2: Identifier expected 缺标识符error 3: Unknown identifier 未定义的标识符error 4: Duplicate identifier 重复定义的标识符error 5: Syntax error 语法错误error 6: Error in real constant 实型常量错误error 7: Error in integer constant 整型常量错误error 8: String constant exceeds line 字符串常量超过一行error 10: Unexpected end of file 文件非正常结束error 11: Line too long 行太长error 12: Type identifier expected 未定义的类型标识符error 13: Too many open files 打开文件太多error 14: Invalid file name 无效的文件名error 15: File not found 文件未找到error 16: Disk full 磁盘满error 17: Invalid compiler directive 无效的编译命令error 18: Too many files 文件太多error 19: Undefined type in pointer def 指针定义中未定义类型error 20: Variable identifier expected 缺变量标识符error 21: Error in type 类型错误error 22: Structure too large 结构类型太长error 23: Set base type out of range 集合基类型越界error 24: File components may not be files or objectsfile分量不能是文件或对象error 25: Invalid string length 无效的字符串长度error 26: Type mismatch 类型不匹配error 27:error 27:Invalid subrange base type 无效的子界基类型error 28:Lower bound greater than upper bound 下界超过上界error 29:Ordinal type expected 缺有序类型error 30:Integer constant expected 缺整型常量error 31:Constant expected 缺常量error 32:Integer or real constant expected 缺整型或实型常量error 33:Pointer Type identifier expected 缺指针类型标识符error 34:Invalid function result type 无效的函数结果类型error 35:Label identifier expected 缺标号标识符error 36:BEGIN expected 缺BEGINerror 37:END expected 缺ENDerror 38:Integer expression expected 缺整型表达式error 39:Ordinal expression expected 缺有序类型表达式error 40:Boolean expression expected 缺布尔表达式error 41:Operand types do not match 操作数类型不匹配error 42:Error in expression 表达式错误error 43:Illegal assignment 非法赋值error 44:Field identifier expected 缺域标识符error 45:Object file too large 目标文件太大error 46:Undefined external 未定义的外部过程与函数error 47:Invalid object file record 无效的OBJ文件格式error 48:Code segment too large 代码段太长error 49:Data segment too large 数据段太长error 50:DO expected 缺DOerror 51:Invalid PUBLIC definition 无效的PUBLIC定义error 52:Invalid EXTRN definition 无效的EXTRN定义error 53: Too many EXTRN definitions 太多的EXTRN定义error 54:OF expected 缺OFerror 55:INTERFACE expected 缺INTERFACEerror 56:Invalid relocatable reference 无效的可重定位引用error 57:THEN expected 缺THENerror 58:TO or DOWNTO expected 缺TO或DOWNTO error 59:Undefined forward 提前引用未经定义的说明error 61:Invalid typecast 无效的类型转换error 62:Division by zero 被零除error 63:Invalid file type 无效的文件类型error 64:Cannot read or write variables of this type 不能读写此类型变量error 65:Pointer variable expected 缺指针类型变量error 66:String variable expected 缺字符串变量error 67:String expression expected 缺字符串表达式error 68:Circular unit reference 单元UNIT部件循环引用error 69:Unit name mismatch 单元名不匹配error 70:Unit version mismatch 单元版本不匹配error 71:Internal stack overflow 内部堆栈溢出error 72:Unit file format error 单元文件格式错误error 73:IMPLEMENTATION expected 缺IMPLEMENTATIONerror 74:Constant and case types do not match 常量和CASE类型不匹配error 75:Record or object variable expected 缺记录或对象变量error 76:Constant out of range 常量越界error 77:File variable expected 缺文件变量error 78:Pointer expression expected 缺指针表达式error 79:Integer or real expression expected 缺整型或实型表达式error 80:Label not within current block 标号不在当前块内error 81:Label already defined 标号已定义error 82:Undefined label in preceding statement part 在前面未定义标号error 83:Invalid @ argument 无效的@参数error 84:UNIT expected 缺UNITerror 85: ";" expected 缺“;”error 86:":" expected 缺“:”error 87:"," expected 缺“,”error 88:"(" expected 缺“(”error 89:")" expected 缺“)”error 90:"=" expected 缺“=”error 91:":=" expected 缺“:=”error 92:"[" or "(." Expected 缺“[”或“(.”error 93: "]" or ".)" expected 缺“]”或“.)”error 94:"." expected 缺“.”error 95: ".." expected 缺“..”error 96:Too many variables 变量太多error 97:Invalid FOR control variable 无效的FOR循环控制变量error 98:Integer variable expected 缺整型变量error 99:Files and procedure types are not allowed here 该处不允许文件和过程类型error 100:String length mismatch 字符串长度不匹配error 101:Invalid ordering of fields 无效域顺序error 102:String constant expected 缺字符串常量error 103:Integer or real variable expected 缺整型或实型变量error 104:Ordinal variable expected 缺有序类型变量error 105:INLINE error INLINE错误error 106:Character expression expected 缺字符表达式error 107:Too many relocation items 重定位项太多error 108:Overflow in arithmetic operation 算术运算溢出error 112:CASE constant out of range CASE常量越界error 113:Error in statement 表达式错误error 114:Cannot call an interrupt procedure 不能调用中断过程error 116:Must be in 8087 mode to compile this 必须在8087模式编译error 117:Target address not found 找不到目标地址error 118:Include files are not allowed here 该处不允许INCLUDE文件error 119:No inherited methods are accessible here 该处继承方法不可访问error 121:Invalid qualifier 无效的限定符error 122:Invalid variable reference 无效的变量引用error 123:Too many symbols 符号太多error 124:Statement part too large 语句体太长error 126:Files must be var parameters 文件必须是变量形参error 127:Too many conditional symbols 条件符号太多error 128:Misplaced conditional directive 条件指令错位error 129:ENDIF directive missing 缺ENDIF指令error 130:Error in initial conditional defines 初始条件定义错误error 131:Header does not match previous definition 和前面定义的过程或函数不匹配error 133:Cannot evaluate this expression 不能计算该表达式error 134:Expression incorrectly terminated 表达式错误结束error 135:Invalid format specifier 无效格式说明符error 136:Invalid indirect reference 无效的间接引用error 137:Structured variables are not allowed here 该处不允许结构变量error 138:Cannot evaluate without System unit 没有System单元不能计算error 139:Cannot access this symbol 不能存取符号error 140:Invalid floating point operation 无效的符号运算error 141:Cannot compile overlays to memory 不能编译覆盖模块至内存error 142:Pointer or procedural variable expected 缺指针或过程变量error 143:Invalid procedure or function reference 无效的过程或函数调用error 144:Cannot overlay this unit 不能覆盖该单元error 146:File access denied 不允许文件访问error 147:Object type expected 缺对象类型error 148:Local object types are not allowed 不允许局部对象类型error 149:VIRTUAL expected 缺VIRTUALerror 150: Method identifier expected 缺方法标识符error 151:Virtual constructors are not allowed 不允许虚构造函数error 152:Constructor identifier expected 缺构造函数标识符error 153:Destructor identifier expected 缺析构函数标识符error 154:Fail only allowed within constructors 只能在构造函数内使用Fail标准过程error 155:Invalid combination of opcode and operands 操作数与操作符无效组合error 156:Memory reference expected 缺内存引用指针error 157:Cannot add or subtract relocatable symbols 不能加减可重定位符号error 158:Invalid register combination 无效寄存器组合error 159:286/287 instructions are not enabled 未激活286/287指令error 160:Invalid symbol reference 无效符号指针error 161:Code generation error 代码生成错误error 162:ASM expected 缺ASMerror 166:Procedure or function identifier expected 缺过程或函数标识符error 167:Cannot export this symbol 不能输出该符号error 168:Duplicate export name 外部文件名重复error 169:Executable file header toerror 170:Too many segments 段太多fatal error C1004: unexpected end of file found 未找到文件末尾(可能是括号匹配问题)fatal error C1021: invalid preprocessor command '1nclude' 无效的编译预处理命令'1nclude' fatal error C1083: Cannot open include file: 'stdi.h': No such file or directory 不能打开头文件'stdi.h',文件或文件夹不存在 error C2101: '&' on constant 不能计算常量的地址error C2059: syntax error : 'while' 在'while'附近,存在语法错误error C2061: syntax error : identifier 'x' 标识符x的附近,存在语法错误 error C2065: 'i' : undeclared identifier 变量i未定义error C2078: too many initializers 数组/结构等变量初始化时的数据太多error C2087: '<Unknown>' : missing subscript 丢失数组下标error C2106: '=' : left operand must be l-value '='的左侧应当是左值,即不能是常量 error C2115: '=' : incompatible types '='两侧的类型不兼容error C2133: 'a' : unknown size a(可能是数组名)的大小不确定。
C语言编程中常见的五种错误及对应解决方案

C语⾔编程中常见的五种错误及对应解决⽅案⽬录1. 未初始化的变量2. 数组越界3. 字符串溢出4. 重复释放内存5. 使⽤⽆效的⽂件指针前⾔:C 语⾔有时名声不太好,因为它不像近期的编程语⾔(⽐如 Rust)那样具有内存安全性。
但是通过额外的代码,⼀些最常见和严重的 C 语⾔错误是可以避免的。
即使是最好的程序员也⽆法完全避免错误。
这些错误可能会引⼊安全漏洞、导致程序崩溃或产⽣意外操作,具体影响要取决于程序的运⾏逻辑。
下⽂讲解了可能影响应⽤程序的五个错误以及避免它们的⽅法:1. 未初始化的变量程序启动时,系统会为其分配⼀块内存以供存储数据。
这意味着程序启动时,变量将获得内存中的⼀个随机值。
有些编程环境会在程序启动时特意将内存“清零”,因此每个变量都得以有初始的零值。
程序中的变量都以零值作为初始值,听上去是很不错的。
但是在 C 编程规范中,系统并不会初始化变量。
看⼀下这个使⽤了若⼲变量和两个数组的⽰例程序:#include <stdio.h>#include <stdlib.h>intmain(){int i, j, k;int numbers[5];int *array;puts("These variables are not initialized:");printf(" i = %d\n", i);printf(" j = %d\n", j);printf(" k = %d\n", k);puts("This array is not initialized:");for (i = 0; i < 5; i++) {printf(" numbers[%d] = %d\n", i, numbers[i]);}puts("malloc an array ...");array = malloc(sizeof(int) * 5);if (array) {puts("This malloc'ed array is not initialized:");for (i = 0; i < 5; i++) {printf(" array[%d] = %d\n", i, array[i]);}free(array);}/* done */puts("Ok");return 0;}这个程序不会初始化变量,所以变量以系统内存中的随机值作为初始值。
C语言常见错误集合大全-完整版-程序员必备手册

if (a%3==0);
I++;
本是如果3整除a,则I加1。但由于if (a%3==0)后多加了分号,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都将自动加1。
再如:
for (I=0;I<5;I++);
{scanf("%d",&x);
printf("%d",x);}
5.忘记加分号。
分号是C语句中不可缺少的一部分,语句末尾必须有分号。
a=1
b=2
编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。
{ z=x+y;
t=z/100;
printf("%f",t);
} QQ291911320
对于复合语句来说,最后一个语句中最后的分号不能忽略不写(这是和PASCAL不同的)。
6.多加分号。
对于一个复合语句,如:
{ z=x+y;
t=z/100;
printf("%f",t);
};
复合语句的花括号后不应再加分号,否则将会画蛇添足。
1.书写标识符时,忽略了大小写字母的区别。
main()
{
int a=5;
printf("%d",A);
} ቤተ መጻሕፍቲ ባይዱ
编译程序把a和A认为是两个不同的变量名,而显示出错信息。C认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。
C语言常见错误分析

C语⾔常见错误分析C语⾔常见错误分析:错误分类:语法错、逻辑错、运⾏错。
0.忘记定义变量:main(){x=3;y=6;printf(“%d\n”,x+y);1.C语⾔的变量⼀定要先定义才能使⽤;2.输⼊输出的数据的类型与所⽤格式说明符不⼀致int a=3;float b=4.5;printf(“%f%d\n”,a,b);它们并不是按照赋值的规则进⾏转换(如把4.5转换为4),⽽是将数据在存储单元中的形式按格式符的要求组织输出(如b占4个字节,只把最后两个字节的数据按%d,作为整数输出) 3.未注意int型数据的数值范围int型数据的数值范围(-32768~32768)int num=89101;printf(“%d”,num);会将超过低16位的数截去从⽽得到23563注意:定义了long型,⽽在输出时仍⽤”%d”说明符,仍会出现以上错误4.输⼊变量时忘记使⽤地址符scanf(“%d%d”,a,b);5.输⼊时数据的组织与要求不符对scanf函数中格式字符串中除了格式说明符外,对其他字符必须按原样输⼊6.误把”=“作为”等于”⽐较符“=“为附值运算符“==“为⽐较运算符7.语句后⾯漏分号{t=a;a=b;b=t}它是pascal的语法8.不该加分号的地⽅加了分号if(a>b);printf(“a is larger than b\n”);for(i=0;i<10;i++);scanf(“%d”,&x);printf(“%d\n”,x*x);}9.对应该有花括弧的复合语句,忘记加花括弧sum=0;i=1;while(i<=100)sum=sum+1;i++;10.括弧不配对while((c=getchar()!=‘#’)putchar(c);11.在⽤标识时,忘记了⼤写字母和⼩写字母的区别{int a,b,c;a=2;b=3;C=A+B;printf(“%d+%d=%D”,A,B,C);}12.引⽤数组元素时误⽤发圆括弧{int i,a(10);for(i=0;i<10;i++)scanf(“%d”,&a(i));}13.在定义数组时,将定义的”元素个数”误认为是”可使⽤的最⼤下标值{ int a[10]={1,2,3,4,5,6,7,8,9,10};int i;for(i=1;i<=10;i++)printf(“%d”,a[i]);}14.对⼆维或多维数组的定义和引⽤的⽅法不对{int a[5,4];printf(“%d”,a[1+2,2+2]);…}15.误以为数组名代表数组中全部元素{int a[4]={1,2,3,4};printf(“%d%d%d%d”,a);}16.混淆字符数组与字符指针的区别main(){char str[40];str=“Computer and c”;printf(“%s\n”,str);}17.在引⽤指针变量之前没有对它赋予确定的值{ char *p;scanf(“%s”,p);}{char *p,c[20];p=c;scanf(“%s”,p);}18.switch语句的各分⽀中漏写 break语句混淆字符和字符串的表⽰形式…char sex;sex=“M”;…19.使⽤⾃加(++)和⾃减(--)运算符时出的错误{int *p,a[5]={1,3,5,7,9};p=a;printf(“%d”,*p++);注意于*(++p)的区别;20.所调⽤的函数在调⽤语句之后才定义,⽽⼜在调⽤前未加说明main() {float x,y,z;x=3.5;y=-7.6;z=max(x,y);printf(“%f”,z);}float max(float x,float y){return (x>y?x:y);}21.误认为形参值的改变会影响实参的值swap(int x,int y){int t;t=x;x=y;y=t;}main(){int a,b;a=3;b=4;swap(a,b);printf(“%d,%d\n”,a,b);}22.函数的实参和形参类型不⼀致fun(float x,float y)main(){int a=3,b=4;c=fun(a,b);…}23.不同类的型指针混⽤{int i=3,*p1;float a=1.5,*p2;p1=&i;p2=&a;printf(“%d,%d\n”,*p1,*p2);}24.没有注意函数参数的求值顺序int i=3;prinft(“%d,%d,%d\n”,i,++i,++i);结果为5,5,4因为VC++是采取⾃右⾄左的顺序求函数的值C标准没有具体规定函数参数求值的顺序25.混淆数组名与指针变量的区别{ int i,a[5];for(i=0;i<5;i++)scanf(“%d”,a++);}{int a[5],*p;p=a;for(int i=0;i<5;i++)scanf(“%d”,p++)}{int a[5],*p;for(p=a;pscanf(“%d”,p);}26.混淆结构体类型与结构体变量的区别struct worker{long int num;char name[20];char sex;int age;};worker.num=187045;strcpy(/doc/449e33ccda38376baf1faefa.html ,”ZhangFun”);worker.sex=‘M’;worker.age=18;27.使⽤⽂件时忘记打开,⽤只读⽅式打开,却企图向该⽂件输出数据if(fp=fopen(“test”,”r”))==NULL){printf(“cannot open this file\n”);exit(0);ch=fgetc(fp);while(ch!=‘#’){ch=ch+4;fputc(ch,fp);ch=fgetc(fp);}C语⾔编程常见问题分析1.2.1 参数校验问题在C语⾔的函数中,⼀般都要对函数的参数进⾏校验,但是有些情况下不在函数内进⾏校验,⽽由调⽤者在外部校验,到底什么情况下应该在函数内进⾏校验,什么情况下不需要在函数内进⾏校验呢?下列原则可供读者参考。
c语言中经常遇到的问题

c语言中经常遇到的问题在C语言中,有一些常见的问题可能会困扰许多初学者。
在本文中,我将介绍几个经常出现问题的情况,并提供相应的解决方案。
1. 编译错误编译错误是C语言中常见的问题。
它们通常是由于语法错误、函数或变量未定义、拼写错误等导致的。
为了解决这个问题,您可以仔细检查代码,确保所有的拼写都正确,函数和变量都已定义,并且语法是正确的。
另外,使用编译器提供的错误信息来定位问题所在,这将帮助您更快地解决编译错误。
2. 逻辑错误逻辑错误是编程过程中另一个常见的问题。
这类错误在程序编译和运行时都不会出现错误,但程序的输出结果可能与预期不符。
要解决逻辑错误,您可以使用调试工具,例如在代码中插入调试语句、使用断点等。
通过逐步执行代码并检查变量的值,您可以找到导致逻辑错误的地方,并修复它们。
3. 内存泄漏内存泄漏是指程序在分配内存后,未释放已使用的内存空间。
这会导致程序占用过多的内存,并最终导致程序崩溃。
要解决内存泄漏问题,您需要确保在使用完内存后,通过调用"free"函数来释放内存空间。
此外,您还可以使用内存调试工具来检测和解决内存泄漏问题。
4. 数组越界在C语言中,数组越界错误是一种常见的错误。
当我们尝试访问数组中不存在的索引位置时,会导致程序出现异常或崩溃。
为了避免数组越界错误,您需要确保在访问数组元素之前检查数组索引的有效性,并确保不超过数组的边界。
5. 垃圾值垃圾值是指在变量声明后,未初始化或未赋予有效值的情况下,变量中存在的未知值。
为了解决垃圾值问题,您应该始终在声明变量后,给其一个有效的初值。
这样可以避免使用未定义的变量值造成的程序错误。
在C语言中经常遇到的问题包括编译错误、逻辑错误、内存泄漏、数组越界和垃圾值。
通过仔细检查代码、使用调试工具,以及遵循良好的编程实践,您可以解决这些问题并提高程序的质量。
c语言陷阱题

C语言中的陷阱题通常涉及对语言细节、边缘情况或特定行为的理解。
这些陷阱可能会让初学者或经验不足的程序员犯错。
以下是一些常见的C语言陷阱题示例:1. 未初始化的局部变量c#include <stdio.h>int main() {int a;printf("%d\n", a); // a的值是未定义的,输出可能是任何值return 0;}2. 数组越界c#include <stdio.h>int main() {int arr[5] = {1, 2, 3, 4, 5};printf("%d\n", arr[5]); // 越界访问,未定义行为return 0;}3. 指针与数组的区别c#include <stdio.h>int main() {int arr[] = {1, 2, 3, 4, 5};int *p = arr;sizeof(arr); // 返回整个数组的大小(以字节为单位)sizeof(p); // 返回一个指针的大小(以字节为单位),而不是它所指向的数组的大小return 0;}4. 字符串字面量与字符数组c#include <stdio.h>int main() {char *str1 = "Hello";char str2[] = "Hello";str1[0] = 'h'; // 错误!尝试修改字符串字面量的内容,这是未定义行为。
str2[0] = 'h'; // 正确,修改字符数组的内容。
return 0;}5. 函数参数传递方式c#include <stdio.h>void modify(int a) {a = 10; // 修改的是局部变量a,不影响main函数中的x}int main() {int x = 5;modify(x);printf("%d\n", x); // 输出5,不是10return 0;}6. 浮点数比较由于浮点数的精度问题,直接比较两个浮点数可能会产生意外的结果。
C语言程序常见错误与调试方法

(三)C语言程序调试方法 3、对运行结果作分析,看它是否符合要求。
• 有的初学者看到运行结果就认为没问题了,不作 认真分析,这是危险的。 • 有时,数据比较复杂,难以立即判断结果是否正 确。可以事先考虑好一批“试验数据”,输入这 些数据可以很容易判断结果正确与否。 • 事实上,当程序复杂时很难把所有的可能情况全 部都试到,选择典型的临界数据作试验即可。
C Programming
3、警告 • “警告”是指被编译程序怀疑有错,但不确定, 有时可强行编译通过。例如:主函数没有返回值 时没有加void声明、double型数据被转换为float 型数据等。 • 这些警告中,有些会导致错误,有些则可以编译 通过。
C Programming
(三)C语言程序调试方法
• 编译诊断的语法错误分为3类:致命错误、错误和 警告。
C Programming
1、致命错误 • “致命错误”大多数是编译程序内部发生错误。 • 发生这类错误时,编译被迫终止,只能重新启动 编译程序。幸运的是,这类错误很少发生,但是 为了安全,编译前最好先保存程序。
C Programming
2、错误 • “错误”通常是在编译时,语法不当所引起的, 例如括号不匹配、变量为声明等。 • 产生这类错误时,编译程序会出现报错提示,根 据提示对源程序进行修改即可。这类错误是出现 最频繁的。
C Programming
1、语法错误
• 语法错误是指那些由于编程中输入不符合语法规 则产生的错误。 • 例如:表达式不完整、缺少必要的标点符号、关 键字输入错误、数据类型不匹配、循环语句或选 择语句的关键字不配对等。 • 通常,编译器对程序进行编译的过程中,会把检 测到的语法错误以提示的方式列举出来。
C 语言初学者有哪些常见的基本错误?

C语言是一门广泛使用的编程语言,但对于初学者来说,学习过程中会遇到一些常见的基本错误。
这些错误可能会导致程序出错或者无法正常运行,因此了解和避免这些错误是非常重要的。
1.拼写错误拼写错误是初学者经常犯的错误。
在C语言中,拼写错误可能会导致程序无法编译或者运行错误。
例如,将“printf”拼写为“prinf”或者将“main”拼写为“mian”都会导致程序无法编译。
为了避免这种错误,建议初学者在编写代码时仔细检查拼写,或者使用IDE(集成开发环境),它可以自动检查拼写错误并提供纠正建议。
2.语法错误语法错误是初学者常见的错误之一。
在C语言中,语法错误可能会导致程序无法编译或者运行错误。
例如,忘记添加分号或者花括号不匹配都会导致程序无法编译。
为了避免这种错误,建议初学者仔细阅读代码,并确保所有语法都是正确的。
使用IDE可以帮助初学者检测语法错误。
3.数组越界数组越界是初学者常见的错误之一。
在C语言中,数组越界可能会导致程序崩溃或者出现未定义的行为。
例如,访问数组中不存在的元素或者访问超出数组范围的元素都会导致数组越界。
为了避免这种错误,建议初学者确保数组索引在数组范围内,并使用循环结构来遍历数组。
使用IDE可以帮助初学者检测数组越界错误。
4.变量未初始化变量未初始化是初学者常见的错误之一。
在C语言中,未初始化的变量可能会导致程序出现未定义的行为。
例如,未初始化的变量可能包含随机值或者空值。
为了避免这种错误,建议初学者在使用变量之前初始化它们。
使用IDE可以帮助初学者检测未初始化的变量。
5.内存泄漏内存泄漏是初学者常见的错误之一。
在C语言中,内存泄漏可能会导致程序消耗大量内存并最终崩溃。
例如,未释放动态分配的内存或者重复释放内存都会导致内存泄漏。
为了避免这种错误,建议初学者在使用动态内存分配时,确保释放所有分配的内存。
使用IDE可以帮助初学者检测内存泄漏。
C语言初学者常见的基本错误包括拼写错误、语法错误、数组越界、变量未初始化和内存泄漏。
C语言运行程序错误及解决方法集锦

C语言运行程序错误及解决方法集锦一、基础知识和数据类型、表达式1、{},[],(),‘’,“”不配对。
解决这个问题最好的方法就是每当写这些符号的时候就先写成一对,然后再在中间加内容。
2、忘记在语句的末尾加分号,或在预处理命令后多加分号。
记住:每一个语句的后边都要加分号,而预处理命令并不是语句,所以不加分号,他们必须每行一条,不能把多个命令写在一行。
3、混淆/和\;注释对应的符号是/* */,而转义字符是以\开头,除号是/。
4、printf()和scanf()的参数设置有误,主要表现在以下几方面:(1)类型不匹配的问题。
(例如:有float a=3.5,但输出的时候printf(“a=%d”,a);则屏幕上会显示出a=0.00000或者提示其它运行错误)。
基本原则是:float对应%f, int对应%d, char 对应%c。
(2)个数不匹配。
无论是哪个函数,都可以有n个参数,第一个永远是“”括起来的内容,表示输出格式。
剩下的n-1个是输出的变量或者输入的变量的地址。
需要注意的是,如果后边有n-1个参数,那么前边一定对应n-1个%f一类的格式说明符。
(3)scanf()中变量前忘了加&。
记住:scanf()中变量前要有&(但后边学到的字符数组名和指针前不用加)5、定义标识符的时候经常出现使用非法字符的情况,例如:标识符中不能用空格,也就是说不能有这样的定义:int radium of circle;一般情况下可用下划线将三个单词连接在一起。
6、在使用变量前未定义,或未初始化。
例如:若下边的sum未定义,则在编译时会提示相应的错误信息,而若未初始化为0,则求和的结果一定是错误的。
void main(){ int I,a[10], sum=0; /*只要下边要用,这个定义就必须要有,一般情况下也要有初始值*/ for(I=0;I<10;I++) sum+=a[I];printf(“%d”,sum);}7、计算错误。
C语言常见错误分析汇总

C语言常见错误分析汇总C语言是一种广泛应用的编程语言,但由于语法相对复杂,初学者容易犯一些常见的错误。
下面将汇总一些常见的C语言错误,以便帮助初学者更好地理解和避免这些问题。
1.语法错误:C语言对语法要求非常严格,一些错误的语法表达会导致编译错误。
例如,缺少分号、括号不成对等。
2.逻辑错误:这类错误通常是代码逻辑错误,导致程序运行结果与预期不同。
例如,条件判断错误、循环错误等。
3.变量未初始化:在使用变量之前,未对其进行初始化操作会导致不确定的结果。
这种错误可能会导致程序崩溃或产生意外结果。
4.数组越界:在C语言中,数组的下标从0开始,如果使用了超出数组范围的下标,会导致越界错误。
这可能会修改其他内存空间的值,导致程序错误。
5.内存泄漏:动态分配内存后没有正确释放会导致内存泄漏。
这在长时间运行的程序中可能导致内存耗尽。
6.不匹配的数据类型:数据类型不匹配会导致计算错误或编译错误。
例如,对整型变量使用浮点数运算符,或使用未定义的数据类型。
7.空指针解引用:解引用空指针会导致程序崩溃。
在使用指针之前,一定要确保其指向有效的内存空间。
8.死循环:循环条件错误或循环体内没有正确的终止条件会导致死循环,程序无法正常退出。
9.多次释放同一块内存:多次释放同一块动态分配的内存会导致程序错误或崩溃。
10.缺少返回语句:在函数中缺少返回语句或返回语句在多个分支中没有覆盖所有情况,会导致未定义的行为。
11.使用未定义的变量:在使用变量之前,必须先定义该变量。
否则会导致编译错误。
12.逻辑短路错误:逻辑运算符中,逻辑短路原则是如果已经可以确定逻辑表达式的结果,后续的表达式不会被执行。
如果依赖于后续表达式的计算结果,会导致逻辑错误。
13.误解优先级和结合性:C语言中运算符有优先级和结合性,如果不理解运算符的优先级和结合性,会导致计算错误。
14.使用未声明的函数:在调用函数之前,必须先声明函数。
否则会导致编译错误。
15. 不正确的格式化字符串:在使用printf等函数进行格式化输出时,必须提供与格式字符串匹配的参数,否则会导致未定义的行为。
C语言常见错误及提示

C语言常见错误及提示C语言常见错误分析注意:本文中所列举的错误,给出的只是错误的名称和类型以及错误提示,没有给出对应的改正方法,请有兴趣的同学们根据具体情况自行修改、编译、执行,如果在编程中出现类似错误,能够快速定位错误并解决。
一、错误分类语法错逻辑错运行错二、常见错误及提示1. 变量未定义,C语言的变量一定要先定义才能使用;#includevoid main(){x=3; y=6;printf(“%d\n”,x+y);}错误类型:语法错错误提示:D:\WorkSpace\C++WorkSpace\测试\test.cpp(4) : error C2065: 'x' : undeclared identifierD:\WorkSpace\C++WorkSpace\测试\test.cpp(4) : error C2065: 'y' : undeclared identifier2. 输入输出的数据的类型与所用格式说明符不一致int a=3;float b=4.5;printf(“%f%d\n”,a,b);错误类型:逻辑错它们并不是按照赋值的规则进行转换(如把4.5转换为4),而是将数据在存储单元中的形式按格式符的要求组织输出(如b占4个字节,只把最后两个字节的数据按%d,作为整数输出)错误提示:无3. 未注意int型数据的数值范围short int型数据的数值范围(-32768~32768)short int num=89101;printf(“%d”,num);会将超过低16位的数截去从而得到23563错误类型:逻辑错错误提示:D:\WorkSpace\C++WorkSpace\测试\test.cpp(4) : warning C4305: 'initializing' : truncation from 'const int' to 'short' D:\WorkSpace\C++WorkSpace\测试\test.cpp(4) : warning C4309: 'initializing' : truncation of constant value注意:定义了long型,而在输出时仍用”%d”说明符,仍会出现以上错误4. 输入变量时忘记使用地址符&scanf(“%d%d”,a,b);错误类型:语法错错误提示:D:\WorkSpace\C++WorkSpace\测试\test.cpp(5) : warning C4700: local variable 'b' used without having been initialized D:\WorkSpace\C++WorkSpace\测试\test.cpp(5) : warning C4700: local variable 'a' used without having been initialized5. 输入时数据的组织与要求不符对scanf函数中格式字符串中除了格式说明符外,对其他字符必须按原样输入scanf(“%d, %d”, &a, &b);应当输入:5, 6 否则程序不能正常读入数据错误类型:运行错错误提示:无6. 误把”=“作为”等于”比较符“=“为附值运算符“==“为比较运算符错误类型:逻辑错错误提示:无7. 语句后面漏分号{t=a;a=b;b=t}它是pascal的语法错误类型:语法错错误提示:D:\WorkSpace\C++WorkSpace\测试\test.cpp(9) : error C2143: syntax error : missing ';' before '}'8. 不该加分号的地方加了分号if(a>b);printf(“a is larger than b\n”);for(i=0;i<10;i++);{scanf(“%d”,&x);printf(“%d\n”,x*x);}错误类型:语法错错误提示:D:\WorkSpace\C++WorkSpace\测试\test.cpp(6) : warning C4390: ';' : empty controlled statement found; is this the intent?9. 对应该有花括弧的复合语句,忘记加花括弧sum=0;i=1;while(i<=100)sum=sum+1;i++;由于i始终为1,while循环无法正常退出。
C语言中的常见错误及解决方法

C语言中的常见错误及解决方法C语言是一门广泛应用于计算机编程领域的高级编程语言。
它的简洁性和高效性使得它成为了许多程序员的首选。
然而,即使对于有经验的程序员来说,C语言中也存在一些常见的错误。
本文将探讨一些常见的C语言错误,并提供相应的解决方法。
1. 内存泄漏内存泄漏是C语言中最常见的错误之一。
它发生在程序分配了内存空间,但在使用完毕后未正确释放。
这导致内存空间被占用,最终可能导致程序崩溃或者系统变慢。
解决方法:- 使用malloc函数分配内存后,一定要使用free函数释放内存。
- 为了避免出现遗漏的情况,可以在每次使用完内存后立即释放。
2. 数组越界在C语言中,数组越界是一个常见的错误。
当程序试图访问数组中超出其边界的元素时,会导致未定义的行为,可能引发程序崩溃或产生错误的结果。
解决方法:- 在使用数组时,一定要确保索引值不会超出数组的边界。
- 可以使用循环结构和条件语句来检查数组索引的合法性。
3. 未初始化变量在C语言中,未初始化变量的使用是一个常见的错误。
当程序试图使用未初始化的变量时,它的值是不确定的,可能导致程序产生错误的结果。
解决方法:- 在使用变量之前,一定要确保它已经被正确地初始化。
- 可以使用赋值语句或者初始化函数来初始化变量。
4. 类型不匹配类型不匹配是C语言中另一个常见的错误。
它发生在程序试图将一个类型的值赋给另一个类型的变量,或者将不同类型的变量进行运算。
解决方法:- 在进行类型转换时,可以使用强制类型转换运算符来确保类型匹配。
- 在进行运算时,要确保参与运算的变量类型一致。
5. 逻辑错误逻辑错误是指程序中的逻辑错误或算法错误。
这种错误不会导致程序崩溃,但会导致程序产生错误的结果。
解决方法:- 仔细检查程序中的逻辑,确保算法的正确性。
- 使用调试工具来跟踪程序的执行过程,找出错误所在。
总结:C语言中的常见错误包括内存泄漏、数组越界、未初始化变量、类型不匹配和逻辑错误。
为了避免这些错误,程序员应该养成良好的编程习惯,如及时释放内存、检查数组索引的合法性、正确初始化变量、确保类型匹配和仔细检查程序逻辑。
C语言入门易犯错误总结

C语言初学者易犯错误
如果你是一个初学者,当你的C程序发生了错误,你要相信你自己是错的,因为你犯错误的可能性远远大于书本以及开发工具的错误。
查看错误提示
a)undeclared:可能错误为1,5,6, 8
b)expected…..expression:3,7
c)expected identifier or '(' : 2
d)extraneous closing brace…..: 2
e)redefinition of….. : 4
对应常见错误:
1.使用了未定义的变量。
2.括号匹配错误(例如,{}没有一一配对)。
3.标点符号使用错误(例如,使用中文的分号,双引号,单引号)。
4.重复定义变量(例如,intnum,num;)。
5.单词拼写错误(例如,将main写成了mian)。
6.使用了函数库中的函数,忘记引入对应的头文件。
7.忘记用分号分割语句。
8.自定义函数未声明。
C语言中的常见错误及解决方法

C语言中的常见错误及解决方法C语言作为一种广泛应用于软件开发领域的编程语言,常常出现一些让初学者或经验不足的程序员困惑的错误。
本文将介绍C语言中常见的错误,并提供解决这些错误的方法。
一、语法错误语法错误是编程过程中最常见的错误之一。
它们通常由于代码中存在语法错误或书写错误而导致。
以下是一些常见的语法错误和解决方法:1.1 缺少分号分号是C语言中语句结束的标志,如果未在语句末尾添加分号,编译器会报错。
解决方法是仔细检查代码,确保每个语句的末尾都有分号。
1.2 括号不匹配在C语言中,括号必须成对出现。
如果括号未正确匹配,编译器会报错。
解决方法是仔细检查代码,确保每个左括号都有对应的右括号。
1.3 大小写错误C语言对大小写敏感,因此函数和变量的命名必须与其声明中的大小写完全匹配。
解决方法是检查代码中的命名,并确保其大小写匹配。
1.4 未定义的变量使用未定义的变量会导致编译器报错。
解决方法是确保在使用变量之前先进行声明或定义。
二、逻辑错误逻辑错误在语法上没有问题,但程序的逻辑流程存在缺陷,导致程序运行不符合预期。
以下是一些常见的逻辑错误和解决方法:2.1 数组越界访问在C语言中,数组的索引从0开始。
如果超出数组的索引范围进行访问,会导致程序崩溃或产生意想不到的结果。
解决方法是检查数组索引,并确保它们在合法范围内。
2.2 逻辑运算错误逻辑运算符(如&&、||和!)在C语言中用于组合表达式。
但是,如果这些运算符的使用不当,可能会导致逻辑错误。
解决方法是仔细检查逻辑运算表达式,并确保其符合预期的逻辑规则。
2.3 循环错误循环是C语言中常用的结构之一,但循环中的错误可能导致程序无限循环或不执行循环体。
解决方法是检查循环条件和循环变量,确保它们能正确地控制循环的执行。
三、内存错误内存错误是C语言中常见的错误类型之一。
以下是一些常见的内存错误和解决方法:3.1 内存泄漏内存泄漏指的是在程序中未正确释放分配的内存空间。
C语言常见错误及解决方法

C语言常见错误及解决方法C语言是一门非常重要的编程语言,但是在学习和使用过程中,常常会遇到一些错误。
这些错误可能会导致程序无法正常运行或产生错误的结果。
在这篇文章中,我将介绍一些C语言常见错误及解决方法,希望对你在学习和使用C语言时能有所帮助。
1.语法错误语法错误是最常见的错误之一,它通常是由错别字、缺少分号、括号不匹配等导致的。
解决这类错误的方法是仔细检查代码,并根据编译器的错误提示进行修改。
2.类型错误类型错误指的是错误地使用了不匹配的数据类型。
比如将整数型赋值给浮点型变量,或者将字符型变量赋值给整型变量等。
解决这类错误的方法是确保变量的数据类型匹配,并进行必要的类型转换。
3.空指针错误空指针错误是指使用了未初始化或已被释放的指针变量。
当你尝试使用这些指针变量时,会导致程序崩溃或产生不可预测的结果。
解决这类错误的方法是在使用指针之前,为其分配内存空间并进行初始化。
4.内存泄漏内存泄漏是指在程序运行过程中,分配的内存空间没有被正确释放。
这会导致内存占用越来越多,最终导致程序崩溃或系统资源不足。
解决这类错误的方法是在不再需要使用一些内存空间时,使用free(函数释放它。
5.数组越界数组越界是指访问数组时超过了其允许的范围。
这会导致程序崩溃或产生不可预测的结果。
解决这类错误的方法是确保数组的索引在有效范围内,并正确使用循环等控制结构。
6.逻辑错误逻辑错误是指程序的逻辑顺序有误,导致程序无法达到预期的目标。
解决这类错误的方法是仔细分析程序的逻辑流程,并进行必要的修改和调试。
7.死循环死循环是指程序进入一个无法正常退出的循环。
这可能是由于循环条件错误或循环体内没有设置循环终止条件所导致的。
解决这类错误的方法是确保循环条件正确,同时在必要的情况下添加循环终止条件。
8.文件操作错误在进行文件操作时,可能会发生文件打开失败、读写错误等问题。
解决这类错误的方法是检查文件路径是否正确、文件是否存在以及对文件的读写权限等,并根据具体情况进行调整。
C语言常见错误原因分析及防范

而 “ ” 赋值 运算 符 。 :(= ) = ; =是 例 ia O b 2该语句 在 编 f C语 言规 定 , 量 的使 用 必须 “ 变 先定 义 , 后使 用 ” 并 译 时不 会报 错 , b 2语句永 远不 会执 行 , 。 但 =; 应该 改为 : i f 且, C语 言对 变 量 的大小 写 敏 感 . 忽略 变量 的大小 写 也 ( = ) = ;当 a的值 为 O时 , a O b 2, = b赋值 2 。
二 、 本 语 法 错 误 基 4动 态 定 义 数 组 .
每一 种 语 言都 有 自已 的语 法 . C语 言 也不 例 外 . 程
C语 言 中数组 元素 的个 数不允 许 动态定 义 . 即数 组
序 如果 没有 按照 它 的语 法 规则 编 写就 会 出错 。初 学者 的长 度不 能依 赖运 行 过程 中变 量值 的变 化 而变 化 。下 由于对 语法 尚不 熟悉 . 容 易 碰 到这类 错 误 . 很 常见 的语 面的 数组 定义 是错 误 的 :
21 0 0年第 l 2期
福
建 电
脑
17 6
C语 言 常见错 误 原 因分 析及 防范
万 权性 ,熊 力 维 ,李 微
(九江职 业 大学信 息工程 学 院 江 西 九江 3 2 0 3 0 0)
【 摘
要 】 C语 言是 高等 院校计 算机 、 : 电子 等相 关专 业 的的基 础课 , 其使 用方便灵 活 。 文 对初 学者在 本
编程 过程 中经 常 出现 的错 误 进行 列举 , 分析 错 误 原 因 , 出错 误 防 范建议 , 给 帮助初 学者减 少及 避 免 该 类错
误 . 高程 序 设 计 水 平 。 提
C语言常见错误及解决方法

C语言常见错误及解决方法C语言是一种广泛应用的编程语言,具有高效性和可移植性等特点。
然而,由于C语言对细节的要求较高,很容易出现各种错误。
本文将介绍C语言常见的错误及解决方法。
1.语法错误语法错误是最常见也是最容易发现的错误。
它们通常是由于拼写错误、错误的标点使用或缺少必要的符号而引起的。
解决方法是仔细检查代码,并使用编译器提供的错误信息作为参考。
2.语义错误语义错误是指代码逻辑上的错误,导致程序在运行时产生意外的结果。
这些错误通常是由于错误的条件判断、错误的变量使用或错误的控制流等引起的。
解决方法是通过仔细分析代码,检查可能的逻辑错误。
3.数组越界错误数组越界错误是指访问数组时,超出了数组的界限。
这种错误可能会导致程序崩溃或产生错误的结果。
解决方法是仔细检查数组访问的边界条件,确保索引值在合法范围内。
4.空指针错误空指针错误是指使用未初始化的指针或将指针赋值为空指针,并尝试对其进行操作。
这种错误可能会导致程序崩溃或产生未定义的行为。
解决方法是在使用指针之前,始终初始化指针,并检查指针是否为空。
5.内存泄漏内存泄漏是指程序在分配内存后,未正确释放该内存造成的。
这种错误可能会导致程序占用大量内存,并最终导致系统资源的枯竭。
解决方法是在动态内存分配之后,始终使用free函数释放相关内存。
6.死循环死循环是指程序中出现无法结束的循环结构,导致程序无法继续执行下去。
这种错误通常是由于循环条件错误或循环体中没有跳出循环的语句造成的。
解决方法是仔细检查循环条件,并在循环体中使用终止循环的语句。
7.逻辑错误逻辑错误是指代码的逻辑顺序或条件判断错误,导致程序无法按照预期方式执行。
这种错误通常是由于逻辑表达式的错误或错误的计算顺序引起的。
解决方法是通过仔细分析代码,检查逻辑错误的可能性。
8.类型错误类型错误是指将不兼容的数据类型进行操作或赋值,导致程序产生意外的结果。
这种错误可能会导致数据截断、计算错误或未定义的行为。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
很多学习C语言的同学总会犯这样那样的低级错误,而主流的编辑器VC++6.0虽然可以指出这些错误,但有时候,它对低级错误并不那么敏感,让很多初学者觉得“情何以堪”呐!本人也是C程初学者,在这,将自己常犯的一些错误列出来,并指出错误原因,希望对大家有帮助。
另外,大家自己有什么典型错误的,也可一起分享,让我们一起努力吧!O(∩_∩)O~一、从最简单的漏字多字开始吧:1.1 在scanf赋值时漏&,实例如下:编译器产生如下错误提示:snowkey.cpp(7) : warning C4700: local variable 'c' used without having been initialized snowkey.cpp(7) : warning C4700: local variable 'b' used without having been initialized snowkey.cpp(7) : warning C4700: local variable 'a' used without having been initialized意:局部变量的使用没有被初始化1.2 main函数后加;会产生一系列错误指示,系统会认为你main函数没定义,事实上,你只是多了加了个分号而已,典型如下:编译器产生如下错误提示:(4) : error C2449: found '{' at file scope (missing function header?)(17) : error C2059: syntax error : '}'1.3 定义数据类型时漏逗号,也会产生一系列错误:编译器产生如下错误提示:(4) : error C2146: syntax error : missing ';' before identifier 'n'(4) : error C2065: 'n' : undeclared identifier(4) : error C2146: syntax error : missing ';' before identifier 'sum'(4) : error C2065: 'sum' : undeclared identifier这几条错误最容易误导初学者,表面上说missing ';',事实上,是少了个逗号。
事实上,“syntax error : missing ';' before identifier 'n'”和“'n' : undeclared identifier”要合起来理解。
1.4 printf函数没有用双引号括起来:编译器产生如下错误提示:error C2001: newline in constanterror C2146: syntax error : missing ')' before identifier 'scanf'意:新的一行没断开(指printf函数)语法错误,少了)在定义scanf函数前事实上,是少了"同样的道理,如果在\后面漏了字母(如换行符\n),也会显示同样的错误信息,要仔细查看,一般来说,把那整行仔细检查一遍就可发现错误原因。
实例如下:编译器产生如下错误提示:error C2001: newline in constanterror C2146: syntax error : missing ')' before identifier 'scanf'(和上面的一样)1.5 漏赋初始值直接进入循环加这种错误时灰常致命的因为编译器往往检测不出,程序也能运行,但运行结果往往是错的。
实例如下:上例中(用于求一个数的位数及位数之和的核心部分),cout未赋初始值,直接使用cout++,导致错误。
然而,编译器却显示:0 error(s), 0 warning(s)对这种隐形的错误,一开始总让人头疼,但有错误经验了,就知道该往哪些方向去查错了。
同样的情况我还遇到过的是,使用scanf函数的时候,对于double型数据,输成了%f,导致程序语法正确,逻辑错误,检查了很久才发现。
大家在初学C的时候一定要注意double 类型的输入输出格式是不同(%lf 和%f)。
二、函数类错误2.1 调用函数时,误用已赋值参数:A图B图编译器产生如下错误提示:error C2082: redefinition of formal parameter 'n'意:重新定义n由于在main函数中n已经被赋值,故自定义的p函数就不可在重新使用n,可换用i,ri等任何不与main函数冲突的参数。
后记:找到个网址,里面也有很多错误的集合,有兴趣的朋友可以进一步阅读/~jjguan/C++/error.htm为了方便大家,我还是COPY过来了VC++编译的常见错误1、fatal error C1010: unexpected end of file while looking for precompiled header directive。
寻找预编译头文件路径时遇到了不该遇到的文件尾。
(一般是没有#include "stdafx.h")2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory不能打开包含文件“R…….h”:没有这样的文件或目录。
3、error C2011: 'C……': 'class' type redefinition类“C……”重定义。
4、error C2018: unknown character '0xa3'不认识的字符'0xa3'。
(一般是汉字或中文标点符号)5、error C2057: expected constant expression希望是常量表达式。
(一般出现在switch语句的case分支中)6、error C2065: 'IDD_MYDIALOG' : undeclared identifier“IDD_MYDIALOG”:未声明过的标识符。
7、error C2082: redefinition of formal parameter 'bReset'函数参数“bReset”在函数体中重定义。
8、error C2143: syntax error: missing ':' before '{'句法错误:“{”前缺少“;”。
9、error C2146: syntax error : missing ';' before identifier 'dc'句法错误:在“dc”前丢了“;”。
10、error C2196: case value '69' already used值69已经用过。
(一般出现在switch语句的case分支中)11、error C2509: 'OnTimer' : member function not declared in 'CHelloView'成员函数“OnTimer”没有在“CHelloView”中声明。
12、error C2511: 'reset': overloaded member function 'void (int)' not found in 'B'重载的函数“void reset(int)”在类“B”中找不到。
13、error C2555: 'B::f1': overriding virtual function differs from 'A::f1' only by return type orcalling convention类B对类A中同名函数f1的重载仅根据返回值或调用约定上的区别。
14、error C2660: 'SetTimer' : function does not take 2 parameters“SetTimer”函数不传递2个参数。
15、warning C4035: 'f……': no return value“f……”的return语句没有返回值。
16、warning C4553: '= =' : operator has no effect; did you intend '='?没有效果的运算符“= =”;是否改为“=”?17、warning C4700: local variable 'bReset' used without having been initialized局部变量“bReset”没有初始化就使用。
18、error C4716: 'CMyApp::InitInstance' : must return a value“CMyApp::InitInstance”函数必须返回一个值。
19、LINK : fatal error LNK1168: cannot open Debug/P1.exe for writing连接错误:不能打开P1.exe文件,以改写内容。
(一般是P1.Exe还在运行,未关闭)20、error LNK2001: unresolved external symbol "public: virtual _ _thiscall C……::~C……(void)"连接时发现没有实现的外部符号(变量、函数等)VC6.0编译常见错误第一部分编译错误1.error C2001: newline in constant编号:C2001直译:在常量中出现了换行。
错误分析:(1)字符串常量、字符常量中是否有换行。
(2)在这句语句中,某个字符串常量的尾部是否漏掉了双引号。
(3)在这语句中,某个字符创常量中是否出现了双引号字符“"”,但是没有使用转义符“\"”。
(4)在这句语句中,某个字符常量的尾部是否漏掉了单引号。