我无法从文件中逐行读取文本并将每一行存储到数组中。然后我需要打印出我得到的数组。
我不确定是否为该数组正确分配了空间。我收到来自以下位置的分段错误fgets()
in my read_one_line()
功能。
My code:
#include <stdio.h>
#include <stdlib.h>
char* read_one_line(FILE* fp, char* line);
char* allocate_mem(FILE* fp, char* line);
void print_lines(char** lines, int num_lines){
int i;
for(i = 0 ; i < num_lines; ++i){
printf("%d. %s", i+1, lines[i]);
}
}
void free_lines(char** lines, int num_lines){
int i;
for(i = 0 ; i < num_lines; ++i){
free(lines[i]);
}
if(lines != NULL && num_lines > 0){
free(lines);
}
}
FILE* validate_input(int argc, char* argv[]){
FILE* fp = NULL;
if(argc < 2){
printf("Not enough arguments entered.\nEnding program.\n");
exit(0);
}
else if(argc > 2){
printf("Too many arguments entered.\nEnding program.\n");
exit(0);
}
fp = fopen(argv[1], "r");
if(fp == NULL){
printf("Unable to open file: %s\nEnding program.\n", argv[1]);
exit(0);
}
return fp;
}
void read_lines(FILE* fp, char*** lines, int* num_lines) {
*num_lines = 0;
do {
*num_lines += 1;
*lines = malloc(*num_lines * sizeof(*lines));
for(int i = 0; i < *num_lines; ++i) {
*lines[i] = allocate_mem(fp, *lines[i]);
}
read_one_line(fp, *lines[*num_lines]);
} while(read_one_line(fp, *lines[*num_lines]) != NULL);
}
char* read_one_line(FILE* fp, char* line) {
fgets(line, sizeof(line), fp);
return line;
}
char* allocate_mem(FILE* fp, char* line) {
fseek(fp, 0, SEEK_END);
int length = ftell(fp);
fseek(fp, 0, SEEK_SET);
line = malloc((length + 1) * sizeof(char));
return line;
}
int main(int argc, char* argv[]){
char** lines = NULL;
int num_lines = 0;
FILE* fp = validate_input(argc, argv);
read_lines(fp, &lines, &num_lines);
print_lines(lines, num_lines);
free_lines(lines, num_lines);
fclose(fp);
return 0;
}
非常感谢您的帮助!