- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C常见错误及解决方案
C常见错误及解决方案
C 常见错误及解决方案
以下“解决方案”中的内容对应的是 “错误举例”中内容的解决方法。
1. 把 “=”误当作 “==”使用
错误举例
ect.top = rect.bottom)
{
MessageBox(hwnd, Invalid rectangle!, NULL, MB_OK | MB_ICONERROR);
}
解决方案
因为条件判断误写成了赋值,上面的判断将永远为真,除非rect.bottom 为零。
比较低级却又难以发现的错误。说它低级是因为它属于再基本不过的语法问题;而它之
所以难以发现是因为它不会产生编译错误,唯有在调试过程中跟踪执行才会发现。通常它导
致的后果是某一个条件判断失效或者进一步导致死循环。
2. 使用已释放了的指针
错误举例
最常出现在释放链表时。初学者容易这样写:
while (p)
{
delete p;
p = p-next;
}
解决方案
这样是很危险的。正确的方法是:
while (p)
{
q = p-next;
delete p;
1
C常见错误及解决方案
p = q;
}
3. 在定义数组时,将定义的“元素个数”误认为是可使的最大下标值。
错误举例
main()
{staticinta[10]={1,2,3,4,5,6,7,8,9,10};
printf( %d ,a[10]);
}
解决方案
C 语言规定:定义时用a[10],表示a 数组有 10 个元素。其下标值由0 开始,所以数组
元素a[10]是不存在的。
4. 输入数据时,企图规定精度。
错误举例
scanf( %7.2f ,a);
解决方案
这样做是不合法的,输入数据时不能规定精度。
5. 输入数据的方式与要求不符。
错误举例
①scanf( %d%d ,a,b);
输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:
3,
输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab 。
②scanf( %d,%d ,a,b);
C 规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时
应输入与这些字符相同的字符。下面输入是合法的:
3,
此时不用逗号而用空格或其它字符是不对的。
:
2
C常见错误及解决方案
又如:
scanf( a=%d,b=%d ,a,b);
输入应如以下形式:
a=3,b=4
6. 混淆字符和字符串的表现形式
错误举例
char sex;
sex=”M”;
…
解决方案
sex 为字符变量,只能存放一个字符。而字符常量的形式是用单撇号括起来的,应改为
sex= ‘M’;
“M ”使用双撇号括起来的字符串,它包括两个字符:‘M ’和‘\0’,无法存放到字符变
量sex 中。
7. 赋值写法错误:
错误举例
/*this program is wrong*/
int main(void)
{
int x, *p;
x = 10;
p = x;
文档评论(0)