Chinaunix首页 | 论坛 | 博客
  • 博客访问: 314688
  • 博文数量: 63
  • 博客积分: 2018
  • 博客等级: 大尉
  • 技术积分: 694
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-23 16:34
文章存档

2010年(63)

我的朋友

分类: LINUX

2010-04-17 10:49:39

由于以下程序中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指针,这种情况下程序仍能工作,只不过速度较慢。
阅读(1840) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~