• 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);
    }
  • 相关阅读:
    关于Animator状态在运行时的正负方向播放
    测试-Animator的“当前剪辑CurrentAnimatorStateInfo”
    关于Unity实现游戏录制功能的思考
    关于UI功能解锁,UI特效动画,UI tips的再思考
    堆排序
    单元测试时使用Ninject的小问题
    又开一坑,运动图形MoGraph for Unity
    关于AnimationState的测试
    底层设计应该尽量避免泛型
    java8中计算两个日期时间LocalDateTime的时间差,格式化成xx年yy月zz日aa时bb分cc秒
  • 原文地址:https://www.cnblogs.com/muzihuan/p/4777329.html
Copyright © 2020-2023  润新知