不知大家有没有对几个标准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..
阅读(427) | 评论(0) | 转发(0) |