C语言读取txt文件到数组
在C语言中,读取文本文件内容到数组是一个常见任务,下面我将介绍几种不同的方法来实现这个功能,包括读取整数、字符串或混合数据。

(图片来源网络,侵删)
方法1:读取整数到数组
假设你的txt文件包含一行或多行整数,用空格或换行符分隔。
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 定义数组最大容量
int main() {
FILE *file;
int numbers[MAX_SIZE];
int count = 0;
int num;
// 打开文件
file = fopen("data.txt", "r");
if (file == NULL) {
printf("无法打开文件\n");
return 1;
}
// 读取文件内容到数组
while (fscanf(file, "%d", &num) == 1 && count < MAX_SIZE) {
numbers[count++] = num;
}
// 关闭文件
fclose(file);
// 打印读取的内容(可选)
printf("读取到 %d 个整数:\n", count);
for (int i = 0; i < count; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
return 0;
}
方法2:读取字符串到数组
假设你的txt文件每行一个字符串。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINES 100 // 最大行数
#define MAX_LENGTH 100 // 每行最大长度
int main() {
FILE *file;
char lines[MAX_LINES][MAX_LENGTH];
int count = 0;
// 打开文件
file = fopen("data.txt", "r");
if (file == NULL) {
printf("无法打开文件\n");
return 1;
}
// 读取文件内容到数组
while (fgets(lines[count], MAX_LENGTH, file) != NULL && count < MAX_LINES) {
// 去除换行符
lines[count][strcspn(lines[count], "\n")] = '\0';
count++;
}
// 关闭文件
fclose(file);
// 打印读取的内容(可选)
printf("读取到 %d 行文本:\n", count);
for (int i = 0; i < count; i++) {
printf("%s\n", lines[i]);
}
return 0;
}
方法3:动态分配数组(适用于不确定文件大小的情况)
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *file;
int *numbers = NULL;
int count = 0;
int capacity = 10; // 初始容量
int num;
// 分配初始内存
numbers = (int *)malloc(capacity * sizeof(int));
if (numbers == NULL) {
printf("内存分配失败\n");
return 1;
}
// 打开文件
file = fopen("data.txt", "r");
if (file == NULL) {
printf("无法打开文件\n");
free(numbers);
return 1;
}
// 读取文件内容到动态数组
while (fscanf(file, "%d", &num) == 1) {
// 如果数组已满,扩容
if (count == capacity) {
capacity *= 2;
int *temp = (int *)realloc(numbers, capacity * sizeof(int));
if (temp == NULL) {
printf("内存重新分配失败\n");
free(numbers);
fclose(file);
return 1;
}
numbers = temp;
}
numbers[count++] = num;
}
// 关闭文件
fclose(file);
// 打印读取的内容(可选)
printf("读取到 %d 个整数:\n", count);
for (int i = 0; i < count; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
// 释放内存
free(numbers);
return 0;
}
注意事项
- 错误处理:始终检查文件是否成功打开,内存是否分配成功。
- 数组大小:如果使用固定大小的数组,确保不会超出其容量。
- 文件格式:根据你的txt文件格式选择合适的读取方法。
- 内存管理:动态分配的数组记得在最后释放内存。
- 换行符:使用
fgets读取字符串时,可能需要去除末尾的换行符。
选择哪种方法取决于你的具体需求,包括文件格式、数据类型和预期文件大小。

(图片来源网络,侵删)
