fread 读变长数据
时间: 2025-01-07 08:57:36 浏览: 10
### 使用 `fread` 函数读取变长数据
为了有效地使用 `fread` 函数读取变长数据,通常需要先确定文件的总长度并分配足够的内存空间。以下是具体实现方法:
#### 获取文件大小
可以通过调用 `fseek` 和 `ftell` 来定位到文件末尾并获得其尺寸。
```c
#include <stdio.h>
#include <stdlib.h>
long getFileSize(FILE *file) {
long pos = ftell(file); // 记录当前文件位置
fseek(file, 0L, SEEK_END); // 移动至文件结束处
long size = ftell(file); // 获得当前位置即为文件大小
fseek(file, pos, SEEK_SET); // 返回原位置
return size;
}
```
#### 动态分配缓冲区
根据上述得到的文件大小动态申请相应大小的空间用于保存读入的内容。
```c
int main(void){
FILE* fp = fopen("example.txt", "rb");
if (fp == NULL) { perror("File opening failed"); return EXIT_FAILURE; }
long fileSize = getFileSize(fp);
char *buffer = malloc((fileSize + 1) * sizeof(char)); // 额外加一给终止符留位子
if (!buffer){ fclose(fp); printf("Memory allocation failed\n"); exit(1);}
// 将整个文件内容一次性加载进来
size_t readCount = fread(buffer, sizeof(unsigned char), fileSize, fp);
buffer[fileSize] = '\0'; // 添加字符串终结符[^1]
puts(buffer); // 输出读取的结果
free(buffer); // 清理资源
fclose(fp); // 关闭打开过的文件句柄
return 0;
}
```
此程序片段展示了完整的流程:从计算文件大小、分配适当大小的缓存区域到最后利用 `fread` 完成实际的数据传输过程,并确保最后加上了必要的空字符以形成有效的C风格字符串。
阅读全文