洗尘斋

三悬明镜垂鸿韵,九撩清泉洗尘心

常用链接

统计

最新评论

标准输入输出的问题

    先看下面一个小程序:

int main(int argc, _TCHAR* argv[])
{
        FILE 
*fp=fopen("1.txt","r+");
        fputc('x',fp);
        fputc(
'x',fp);
        fputc(
'x',fp);
       
return 0;
}
    1.txt文件内容为abcdefg,调用函数之后为axxxefg,恩,正确


int main(int argc, _TCHAR* argv[])
{
        FILE 
*fp=fopen("1.txt","rb+");
        char c=fgetc(fp);
        fputc('x',fp);
        fputc(
'x',fp);
        fputc(
'x',fp);
   
    return 0;
}
    而上面的这个程序只是加了一句fgetc,调用后却失去了作用,文件内容没有发生变化,仍然为abcdefg,为什么呢?(该问题在Linux下已不存在)
    《Unix环境高级编程》在使用读写方式打开文件时(type中的+号),输出的后面不能直接跟输入,输入的后面也不能直接跟输出,否则可能会出错。如果需要输出输入相连,则中间 需调用fflush,fseek,fsetpos或rewind等操作。
    既然这样,那我们试一下,看看能不能解决问题,在上面代码中fgetc和fputc中间加入
        fpos_t pos;
        fgetpos(fp,
&pos);
        fsetpos(fp,
&pos);
之后,运行程序,果真可以解决问题。
    C语言的标准I/O库函数由于使用缓存的原因,在使用时可能出现各种各样的问题,尤其是在那种即时性比较强的I/O中,使用时要慎重。尽量使用其他的I/O函数代替之。



posted on 2007-10-17 19:06 芥之舟 阅读(809) 评论(0)  编辑 收藏 引用 所属分类: C/C++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理