如何实现一个函数,用于将整数数组写入文件,并从文件中读取整数数组

下面我将提供一个简单的C语言示例,展示了如何实现一个函数将整数数组写入文件,以及另一个函数从文件中读取整数数组。为了简化,我们将假设整数数组的长度是已知的,并且在写入文件之前已经定义好了。

写入整数数组到文件

复制代码

c复制代码

|---|------------------------------------------------------------------------------------|
| | #include <stdio.h> |
| | #include <stdlib.h> |
| | |
| | // 写入整数数组到文件 |
| | void writeIntArrayToFile(const int* array, size_t size, const char* filename) { |
| | FILE* file = fopen(filename, "wb"); // 以二进制写入模式打开文件 |
| | if (file == NULL) { |
| | perror("打开文件失败"); |
| | exit(EXIT_FAILURE); |
| | } |
| | |
| | // 写入数组的大小(可选,用于读取时知道要读取多少元素) |
| | fwrite(&size, sizeof(size_t), 1, file); |
| | |
| | // 写入数组内容 |
| | fwrite(array, sizeof(int), size, file); |
| | |
| | fclose(file); |
| | } |
| | |
| | ### 读取整数数组从文件 |
| | |
| | c ```` | | | `// 从文件中读取整数数组 ` | | | `int* readIntArrayFromFile(const char* filename, size_t* size) { ` | | | `FILE* file = fopen(filename, "rb"); // 以二进制读取模式打开文件 ` | | | `if (file == NULL) { ` | | | `perror("打开文件失败"); ` | | | `return NULL; ` | | | `} ` | | | | | | `// 读取数组的大小 ` | | | `if (fread(size, sizeof(size_t), 1, file) != 1) { ` | | | `perror("读取数组大小失败"); ` | | | `fclose(file); ` | | | `return NULL; ` | | | `} ` | | | | | | `// 分配内存来存储数组 ` | | | `int* array = (int*)malloc(*size * sizeof(int)); ` | | | `if (array == NULL) { ` | | | `perror("内存分配失败"); ` | | | `fclose(file); ` | | | `return NULL; ` | | | `} ` | | | | | | `// 读取数组内容 ` | | | `if (fread(array, sizeof(int), *size, file) != *size) { ` | | | `perror("读取数组内容失败"); ` | | | `free(array); ` | | | `fclose(file); ` | | | `return NULL; ` | | | `} ` | | | | | | `fclose(file); ` | | | `return array; ` | | | `} ` | | | | | | `### 示例用法 ` | | | | | | c ```` |
| | int main() { |
| | // 示例整数数组 |
| | int numbers[] = {1, 2, 3, 4, 5}; |
| | size_t size = sizeof(numbers) / sizeof(numbers[0]); |
| | |
| | // 写入数组到文件 |
| | writeIntArrayToFile(numbers, size, "numbers.bin"); |
| | |
| | // 从文件读取数组 |
| | size_t readSize; |
| | int* readNumbers = readIntArrayFromFile("numbers.bin", &readSize); |
| | if (readNumbers != NULL) { |
| | // 输出读取的数组内容 |
| | for (size_t i = 0; i < readSize; ++i) { |
| | printf("%d ", readNumbers[i]); |
| | } |
| | printf("\n"); |
| | |
| | // 释放分配的内存 |
| | free(readNumbers); |
| | } |
| | |
| | return 0; |
| | } |

注意:在这个示例中,我们使用了二进制模式("wb" 和 "rb")来打开文件,这样可以确保整数以它们在内存中的原始格式写入和读取,而不受文本模式可能引入的换行符转换等问题的影响。另外,我们还写入了数组的大小到文件中,这样读取时就能知道要读取多少元素。在读取完成后,我们使用 free 函数释放了动态分配的内存。

相关推荐
姜鱼问生11 分钟前
Nginx gzip 压缩:一个配置让页面加载快 3 倍
后端·算法·架构
不会就选b16 分钟前
算法日常・每日刷题--<动态规划>23
算法·动态规划
GreatSQL社区37 分钟前
主从复制SQL线程中断——字符集砸出的坑
java·数据库·算法
Tisfy2 小时前
LeetCode 2333.最小差值平方和:排序 + 数学计算(不用二分)
数学·算法·leetcode·题解·贪心·排序
aqiu1111112 小时前
【C++算法打怪专栏】LeetCode 217. 存在重复元素(解法总结)
c++·算法·leetcode
yi0113 小时前
DAY28: LeetCode 111. 二叉树的最小深度
人工智能·笔记·python·算法·leetcode·二叉树·递归
wuyk5553 小时前
27.LeetCode 2265. 统计值等于子树平均值的节点数 —— 后序遍历实战
stm32·单片机·嵌入式硬件·算法
xiangyun613 小时前
C++ list 模拟实现(二):const迭代器与反向迭代器,模板的黑魔法
开发语言·数据库·c++·算法·stl·list
xxwl5854 小时前
三、区域赛算法模版第三章---字符串相关算法
笔记·学习·算法
信奥卷王4 小时前
[GESP202509 六级] 划分字符串(含视频)
数据结构·算法