#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct FileData
{
const char* file_name; // 文件名
FILE* fp; // 文件指针
char* buffer; // 缓冲区
char* content; // 读取内容
char* state; // 读取状态
size_t index; // 数据下标
size_t size; // 存储大小(bit)
} FileInfo;
void read(FileInfo* f);
int main()
{
// 设置utf-8编码
system("chcp 65001");
system("cls");
FileInfo* fi = (FileInfo*)malloc(sizeof(FileInfo));
fi->buffer = (char*)malloc(sizeof(char) * 255);
fi->content = (char*)malloc(sizeof(char));
fi->file_name = "C:\\Users\\hongz\\Desktop\\1.txt";
fi->fp = fopen(fi->file_name, "r+");
fi->index = 0;
fi->size = 0;
fi->state = NULL;
// 第一次读取数据
fi->state = fgets(fi->buffer, 255, fi->fp);
// 继续读取
read(fi);
// 打印内容
puts(fi->content);
// 打印数据长度
printf("data len:%zu bit\n", fi->size);
return 0;
}
void read(FileInfo* fi)
{
if (fi->state == NULL)
{
fi->content[fi->index] = '\0';
fclose(fi->fp);
return;
}
// 存储长度
fi->size += strlen(fi->state);
// 扩展空间
fi->content = realloc(fi->content, fi->size);
// 存储内容
for (size_t i = 0; i < strlen(fi->state); i++)
{
fi->content[fi->index] = fi->buffer[i];
fi->index++;
}
// 读取数据
fi->state = fgets(fi->buffer, 255, fi->fp);
read(fi);
}
记得点赞,编码不易。