由于以下程序中c定义为char类型,就可能引发错误。
#include
main()
{
int i;
char c;
for(i=0;i<5;i++){
scanf("%d",&c);
printf("%d",i);
}
printf("\n");
}
这个程序不一定输出 0 1 2 3 4
却可能输出 0 0 0 0 0 1 2 3 4
#include
main()
{
char c;
while((c=getchar())!=EOF)
putchar(c);
}
存在两种可能的结果:
一种可能是,某些合法的输入字符在被"截断"后使得c的取值与EOF相同;
另一种可能是,c根本取不到EOF这个值。
对于前一种情况,程序将在文件复制的中途终止;对于后一种情况,程序将
陷入一个死循环。
下面的程序由于buf类型定义的不妥,也不会得到正确结果。
#include
main()
{
int c;
char buf[buf_size];
setbuf(stdout,buf);
while((c=getchar())!=EOF)
putchar(c);
}
buf缓冲区在main函数结束之后会被清空,在此之前buf字符数组已经被释放!
避免错误分方法:
1. static char buf[buf_size];
2. 动态分配缓冲区:
char *malloc();
setbuf(stdout,malloc(buf_size));
在此并不需要检查malloc是否调用成功,如果调用失败,将返回一个null指针,这种情况下程序仍能工作,只不过速度较慢。
阅读(1851) | 评论(0) | 转发(0) |