C语言出错常见情况.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言出错常见情况

25、不同类型的指针混用 例如: main?() { char?x=3,*p1; int?*p2; p1=x; p2=p1; printf?(%d,%d,x,y); } 在上例中,设计者本意是想将指针p1所指的值赋p2,但是由于p1与p2所指向的类型不同,不能赋值。在赋值时必须进行强制类型转换。如: main?() { char?x=3,*p1; int?*p2; p1=x; p2=(int?*)p1; printf?(%d,%d,*p1,*p2); } 指向不同类型的指针变量进行强制转换后赋值,在C中是常用的,例如,用malloc函数开辟的数据存储单元,函数的返回值是一个空指针(void),需要用强制转换成指向所需存储类型,如指向一个结构体,用以组成一个链表: struct?str ???{ ???int?a; ???struct?str?*next; ???}*p1; /*???用户程序列??*/ p1=(struct?str?*)malloc?(size_t,size) 在ICCAVR中,malloc函数返回的是void类型的指针,将其强制转换为struct?str类型的结构体指针。 26、混淆数组与指针变量的区别 例如: main?() { int?i,a[5]; for?(i=0;i5;i++) ????scanf?(%d,a++); } 在上例中,设计者意图通过a++的操作,引用a数组的不同元素。由于C规定数组名代表数组的首地址,它的值是一个常量,因此用a++是错误的。应改为用指针变量来实现,如: main?() { int?i,a[5],*p; p=a; for?(i=0;i5;i++) ????scanf?(%d,p++); } 27、混淆结构体类型与结构体变量的区别 例如: struct?worker ???{ ???unsigned?char?num; ???char?name[20]; ???}; worker.num=1; 在上例中,只是说明了一种struct?worker的结构,但是C编译器并没有为这种类型的结构体变量开辟存储空间,因此不能对结构体类型赋值。应用该类型定义了一个结体类型的变量后,才能对这个变量赋值,应改为: struct?worker ???{ ???unsigned?char?num; ???char?name[20]; ???}; struct?worker?work; work.num=1; 28.输入数据时,企图规定精度。scanf(%7.2f,a);这样做是不合法的,输入数据时不能规定精度。 29.忽视了while和do-while语句在细节上的区别。 (1)main() {int a=0,I; scanf(%d,I); while(I=10) {a=a+I; I++; } printf(%d,a); } (2)main() { int a=0,I; scanf(%d,I); Do {a=a+I; I++; } while(I=10); printf(%d,a); } 可以看到,当输入I的值小于或等于10时,二者得到的结果相同。而当I10时,二者结果就不同了。因为while循环是先判断后执行,而do-while循环是先执行后判断。对于大于10的数while循环一次也不执行循环体,而do-while语句则要执行一次循环体。 9、在不该加分号的地方加了分号 #include?io8515v.h; 由于伪指令不是C程序语句,因此后面不能加分号。 初学者也常在判断语句的条件表达式后面加入分号, 例如: main?() { unsigned?int?i,sum; sum=0;? for?(i=0;i10;i++); sum+=i; } 在上例中,在for的表达式后面中入分号,则C编译认为循环体是一个空操作,这与设计者的本意不符。 10、对应该有花括号的复合语句,忘记加花括号 例如: unsigned?char?i=1; unsigned?int?sum=0; while?(i=100) ????sum=sum+i; ????i++; 我们在前面举过这个例子,应改为: unsigned?char?i=1; unsigned?int?sum=0; while?(i=100) ????{ ????sum=sum+i; ????i++; ????} 11、括号不配对 当一个复合语句中使用多层括号时,常会出现这类错误;也常出现大括号不配对的现象,都是粗心所致。 例如: while?((c=getcha

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档