您的位置:首页 > 其它

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: