zoukankan      html  css  js  c++  java
  • fread,fwrite(一)

    头文件
    <stdio.h>
    函数原型
    size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
    size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

    函数意思
    fread 从stream读取内容放到ptr指向的内存中,读取nmemb次,每次读取size大小
    fread 从ptr指向的内存中,读取nmemb次,每次读取size大小,写入到文件中

    每次查函数原型时仅仅根据函数名字无法知道哪个读取次数,哪个是每次读取大小,所以我修改一下,方便自己理解
    size_t fread(void *ptr, size_t each_time_size, size_t times, FILE *stream);
    size_t fwrite(const void *ptr, size_t each_time_size, size_t times, FILE *stream);

    顺便一提,函数不会自动加字符串结束符
    小demo

    int main(void)

    {

    char arr[10] = { 0 };

    FILE* file = fopen("a.txt", "rb");

    fread(arr, sizeof(arr), 1, file); // 这里改为sizeof(arr) - 1 可以预留结束符

    printf("%s ", arr);

    fclose(file);

    return 0;

    }

    a.txt文件内容如下
    123456789abcd
    123456
    abcde
    123456
    abcde

    结果
    123456789a

    文件保持不变

    int main(void)

    {

    char arr[30] = { 0 };

    FILE* file = fopen("a.txt", "rb");

    fread(arr, 10, 2, file); // 读取20个

    printf("%s ", arr);

    fxlose(file);

    return 0;

    }

    结果
    123456789abcd
    123456
    一共20个字符(字符d后面有个 )

    fwrite
    文件清空后

    int main(void)

    {

    char arr[10] = "abcde";

    FILE* file = fopen("a.txt", "r+");

    fwrite(arr, strlen(arr), 1, file);

    fwrite(arr, sizeof(arr) - 1, 1, file); // 会向文件写入字符串结束符

    fclose(file);

    return 0;

    }

    结果如下

    感觉文件不支持这个

  • 相关阅读:
    MD支持新标签跳转
    线上问题cpu100处理记录
    OpenShift 4.6方式下OperatorHub的变化
    OpenShift 4.5.7 版本基础镜像下载
    GLPI企业使用(一),连接AD域,LDAP登录。
    GLPI配置文件说明:默认权限组
    企业服务器规划
    港股通转托管
    mui实现下拉刷新以及click事件无法响应问题
    asp.net core+websocket实现实时通信
  • 原文地址:https://www.cnblogs.com/goodluck14/p/13191787.html
Copyright © 2011-2022 走看看