fgets fputs fread fwrite
2015-09-01 23:11
363 查看
char *gets(char *s);
一般不要用:因为他的参数只是一个地址,不知道空间大小,输入缓冲区容易溢出;
char *fgets(char *s, int size, FILE *stream);
参数1:数据存放首地址
参数2:读的数据大小size-1
参数3:要读的数据流
功能:从一个stream中读取不超过size大小的数据并存放到以s为起始地址的buf中去;
返回值:正常返回s,出错或者读到文件尾返回NULL;
正常结束两种情况:
size -1 +'\0'
'\n'
eg:#define SIZE 5
char buf[SIZE];
fgets(buf,SIZE,stream);
要读abcd这个字符串的话需要读2次
1---> a b c d '\0'
2--->'\n' '\0'
int fputs(const char *s, FILE *stream);
参数1:要写的字符串起始地址
参数2:要被写入的流
功能:写一个起始地址为s的字符串到stream中
返回值:成功返回非负整数,失败返回EOF
范例:实现文件复制功能----使用fgets与fputs函数
/*./mycpy src dest*/ #include <stdio.h> #include <stdlib.h> /* argv[1]:src argv[2]:dest */ #define BUFSIZE 1024 int main(int argc , char **argv) { FILE *fps ; FILE *fpd ; char buf[BUFSIZE]; if(argc < 3) { fprintf(stderr,"Usage:%s <src.file> <dest.file>\n",argv[0]); exit(1); } fps = fopen(argv[1],"r"); if(fps == NULL) { perror("fopen()"); exit(1); } fpd = fopen(argv[2],"w+"); if(fpd == NULL) { perror("fopen()"); fclose(fps); exit(1); } while(fgets(buf,BUFSIZE,fps) != NULL) fputs(buf, fpd); fclose(fpd); fclose(fps); exit(0); }
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:从stream中读nmemb个对象,每个对象size大小,读到ptr地址中去;
返回值:真实读入元素的个数
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:从ptr起始的地址,写nmemb个对象,每个对象size个大小,写到stream中
返回值:真实写入元素的个数
范例:实现文件复制功能----使用fread与fwrite函数
/*./mycpy src dest*/ #include <stdio.h> #include <stdlib.h> /* argv[1]:src argv[2]:dest */ #define BUFSIZE 1024 int main(int argc , char **argv) { FILE *fps ; FILE *fpd ; int num = 0 ; char buf[BUFSIZE]; if(argc < 3) { fprintf(stderr,"Usage:%s <src.file> <dest.file>\n",argv[0]); exit(1); } fps = fopen(argv[1],"r"); if(fps == NULL) { perror("fopen()"); exit(1); } fpd = fopen(argv[2],"w+"); if(fpd == NULL) { perror("fopen()"); fclose(fps); exit(1); } while((num = fread(buf,1,BUFSIZE,fps)) > 0) fwrite(buf,1,BUFSIZE,fpd); fclose(fpd); fclose(fps); exit(0); }
相关文章推荐
- 设计模式学习之原型模式
- 【Leetcode】Set matrix zeros
- Javascript高级程序设计——基本包装类型
- NoSQL
- HDU1025 - Constructing Roads In JGShining's Kingdom (最长上升子序列)
- (外文翻译)给它五分钟
- 14.中介者模式(设计模式笔记)
- 传统大佬要做互联网装修,先把脑后的辫子剪了
- Spring笔记――5.深入理解容器中的Bean
- scala实现设计模式之中介者模式
- 第一百五十二天 how can I 坚持
- 文章标题
- HDU 1016 dfs+回溯
- http协议详解
- 【POJ1236】【tarjan】【SCC强连通】
- Leetcode231 Power of Two
- 求出1-100之间所有的素数(只能被1和它本身整除),要求每5个换行输出。
- h5地理位置对象navigator.geolocation
- 读jQuery之六(缓存数据)
- SPOJ 375 树链剖分学习