C语言编写函数将文件逐行保存在数组里并将数组作为函数的返回值,给出具体的代码
时间: 2024-02-18 13:03:30 浏览: 28
好的,以下是一个可以将文件逐行保存在数组里并将数组作为函数返回值的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LEN 1000 // 定义每行最大字符数
char **read_file_lines(const char *filename, int *num_lines) {
FILE *fp = fopen(filename, "r"); // 打开文件
if (!fp) {
fprintf(stderr, "Error opening file %s\n", filename);
exit(1);
}
// 计算文件行数
int count = 0;
char ch;
while ((ch = fgetc(fp)) != EOF) {
if (ch == '\n') {
count++;
}
}
rewind(fp); // 重置文件指针
// 动态分配内存保存每行内容
char **lines = (char **) malloc(count * sizeof(char *));
if (!lines) {
fprintf(stderr, "Error allocating memory\n");
exit(1);
}
// 逐行读取文件内容并保存在数组里
int i = 0;
while (fgets(lines[i] = (char *) malloc(MAX_LINE_LEN), MAX_LINE_LEN, fp)) {
lines[i][strlen(lines[i]) - 1] = '\0'; // 去掉换行符
i++;
}
fclose(fp); // 关闭文件
*num_lines = count; // 保存读取到的行数
return lines; // 返回保存行内容的数组指针
}
int main() {
int num_lines;
char **lines = read_file_lines("example.txt", &num_lines);
for (int i = 0; i < num_lines; i++) {
printf("%s\n", lines[i]);
free(lines[i]); // 释放每行内存空间
}
free(lines); // 释放行数组内存空间
return 0;
}
```
以上代码中,read_file_lines 函数接收一个文件名和一个指向整型变量的指针作为参数,它会逐行读取文件内容并将每行保存在动态分配的内存空间里,最后将保存行内容的数组指针作为返回值,同时将读取到的行数保存在传入的整型变量里。主函数调用 read_file_lines 函数读取文件内容并将每行打印出来,最后释放动态分配的内存空间。