Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26327
  • 博文数量: 16
  • 博客积分: 770
  • 博客等级: 军士长
  • 技术积分: 195
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-02 10:33
文章分类

全部博文(16)

文章存档

2011年(1)

2009年(15)

我的朋友

分类: C/C++

2009-03-09 10:10:17

  不知大家有没有对几个标准IO中的行输入输入出有过混淆。
  1.fgets 和fputs是比较推荐使用的函数。
  原型为:
   char *fgets(char *restrict buf,int n,FILE *restrict fp);
   int fputs(const char *restrict str,FILE *restrict fp);
 fgets会从FP中读入一行,而且会保存换行符.而且必须制定缓冲的大小,当一行大于缓冲的最大值,则行被截断,并且读取最大值为缓冲区的n-1。fputs刚好相反,它会将缓冲中的换行符丢弃。
  2. char *gets(char *buf)
   int puts(const char *buf)
首先,这两个行数不被推荐使用,因为gets不能指定缓冲区的长度,这就会造成缓冲区溢出,比如一行大于缓冲区,则会覆盖其他地址的数据。
   其次。gets不将换行符保存到缓冲当中,puts换将换行符输出。
  3.利用size_t fread(void *restrict ptr,size_t size,size_t nobj, FILE *restrict fp);
       sieze_t fwrite(const void *restrict ptr,size_t size,size_t nobj,FILE *restrict fp)可以实现结构体的读和写,这样就非常的方便。
 4.前段时间学习文件IO时曾写了个简单的测试文件长度的程序。在标准IO中也有,不过需要由
  int fseek(FILE *fp,long offset, int whence);
  long ftell(FILE *fp)一起使用。
  另外还有void rewind(FILE *fp)可以时文件指针回到开始位置。
 C标准又引进了fgetpos(FILE *resrict fp,fpos_t *restrict pos);
            fsetpos(FILE *fp,const fpos_t *pos);用于对流位置的地位
 
to be continued..
阅读(393) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~