IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 标准c库写入结构体到文件 -> 正文阅读

[C++知识库]标准c库写入结构体到文件

一.fopen()与open()二者区别

参考文章连接:https://www.cnblogs.com/NickyYe/p/5497659.html

二.使用标准c库函数写入字符串到文件

1.代码实现:

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
//      FILE *fopen(const char *pathname, const char *mode);
        FILE *fp;
        fp = fopen("./kun.txt", "w+");

//      size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
//1.char *str(缓冲区)
//2.sizeof(char)
//3.字符串元素个数
//4.文件流fp    
        char *str = "kobe bryant";
        fwrite(str, sizeof(char), strlen(str), fp);
        //fwrite(str, sizeof(char)*strlen(str), 1, fp);  //在不调用fwrite()返回值的时候,第二个和第三个参数切换没有影响

//      int fseek(FILE *stream, long offset, int whence);
        fseek(fp, 0, SEEK_SET);  //注意在fead()前记得要将光标前置文件首,否则reaBuf[128]里面没有数据

//      size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
        char readBuf[128] = {0};
        fread(readBuf, sizeof(char), strlen(str), fp);
        //fread(readBuf, sizeof(char)*strlen(str), 1, fp);  //同fwrite,不调用返回值的时候,第二个参数、第三个参数可以灵活切换

        printf("read: %s\n", readBuf);
        return 0;
}

2.运行结果

3.生成的文本文件

4.关于fwrite()、fread()返回值补充

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
//      FILE *fopen(const char *pathname, const char *mode);
        FILE *fp;
        fp = fopen("./kun.txt", "w+");

//      size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
//1.char *str(缓冲区)
//2.sizeof(char)
//3.字符串元素个数
//4.文件流fp    
        char *str = "kobe bryant";
        int nwrite = fwrite(str, sizeof(char), strlen(str), fp);      //调用fwrite()返回值的时候,不管size的大小是否等于1,nwrite的值等于第三个参数
        //int nwrite = fwrite(str, sizeof(char)*strlen(str), 1, fp);  

//      int fseek(FILE *stream, long offset, int whence);
        fseek(fp, 0, SEEK_SET);  //注意在fead()前记得要将光标前置文件首,否则reaBuf[128]里面没有数据

//      size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
        char readBuf[128] = {0};
        int nread = fread(readBuf, sizeof(char), strlen(str), fp);  //这里第二个参数size大小为sizeof(char)=1,nread就等于第三个参数的值
        int nread = fread(readBuf, sizeof(char)*strlen(str), 1, fp);  //当第二个参数size大小不等于1时,它的值跟第三个参数没有直接联系

        printf("context: %s\nread: %d, write: %d\n", readBuf, nread, nwrite);
        return 0;
}

PS:这里对fwrite()、fread()返回值Linux函数手册的说明如下

?红色箭头部分强调只有当两个函数第二个参数size值为1的时候,其返回值才等于传递的字节数,同时对于fwrite()返回值而言,无论size大小是否为1,其返回值都等于第三个参数大小;这与fread()返回值有区别,区别可见代码注释部分。

三.标准c库写入结构体到文件

1.代码实现

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

struct Student
{
        int a;
        char c;
};

int main(int argc, char *argv[])
{
        FILE *fp;
        struct Student data = {81, 'v'};
        struct Student data2;

        fp = fopen("./kun2.txt", "w+");

        fwrite(&data, sizeof(struct Student), 1, fp);
        fseek(fp, 0, SEEK_SET);
        fread(&data2, sizeof(struct Student), 1, fp);

        printf("read: %d, %c\n", data2.a, data2.c);

        fclose(fp);
        return 0;
}

2.运行结果

3.生成文件

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-16 19:28:07  更:2021-10-16 19:29:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:22:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码