1.5 fgets fputs fread fwrite

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);
}
posted @ 2015-09-01 23:11  muzihuan  阅读(250)  评论(0编辑  收藏  举报