zoukankan      html  css  js  c++  java
  • 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 +''

            ' '

    eg:#define SIZE  5

         char buf[SIZE];

         fgets(buf,SIZE,stream);

         要读abcd这个字符串的话需要读2次

         1---> a b c d  ''

         2--->' '  ''

    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>
    ",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>
    ",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);
    }
  • 相关阅读:
    关于sqlite数据库在使用过程中应该注意以下几点
    关于THREAD线程中CurrentCulture与CurrentUICulture的学习
    转:ASP.NET MVC3升级到ASP.NET MVC4
    win8 iis安装及网站发布
    转: CKEditor/CKFinder升级心得
    [更新]Windows Phone 实现类似“微博”下拉刷新效果
    EntityFramework中使用Include可能带来的问题
    [更新]Luke.Net for Pangu 盘古分词版更新
    文件大小友好显示类
    找出最慢的查询语句Find your slowest queries
  • 原文地址:https://www.cnblogs.com/muzihuan/p/4777329.html
Copyright © 2011-2022 走看看