Использование fgets для копирования строк в массив строк?

у меня есть программа на C, которую яЯ пытаюсь написать, который намеревается обратить строки файла. Я до сих пор очень неумел в C (хотя я пришел из Java), поэтому я, скорее всего, делаю ошибки с указателями и тому подобным, но я 'Я пытался обращаться к руководству на каждом шагу. Это что-то вроде задания.

Смысл программы в том, чтобы перевернуть файлс содержанием до MAX_LINES в количестве, каждая строка не длиннее MAX_CHARS. Метод, который я хотел попробовать, заключается в следующем: используйте fgets для чтения из файла, 80 символов или до EOL, сохраните эту строку и повторяйте процесс, пока не будет достигнут EOF или MAX_LINES, используя боковой счетчик. После этого я просто помещаю одну и ту же строку в другой массив, переходя от second_array [counter] к 0. Однако у меня возникают проблемы с получением строк в первый массив. Вот'Что я имею до сих пор:

1 #include 
2 #include 
3
4 #define MAX_LINES 100
5 #define MAX_CHAR 80
6
7 int main(int argc, char *argv[])
8 {
9         if(argc != 2)
10                 goto out;
11         FILE *fp;
12         char *str[MAX_CHAR];
13         char buffer[MAX_CHAR];
14         char *revstr[MAX_CHAR];
15         int curr_line = 0, i = 0, j =0;
16
17         fp = fopen(argv[1],"r");
18
19         out:
20         if (fp == NULL && argc != 2){
21                 printf("File cannot be found or read failed.\n");
22                 return -1;
23         }
24
25         /* printf("This part of the program reverses the input text file, up to a  maximum of 100 lines and 80 characters per line.\n The reversed file, from the last (or    100th) line to the first, is the following:\n\n"); */
26
27         /* fgets reads one line at a time, until 80 chars, EOL or EOF */
28         while(curr_line < MAX_LINES && ((fgets(buffer, MAX_CHAR, fp)) != NULL)){
29
30                 str[i] = buffer;
31                 ++j;
32                 ++i;
33         }
34
35         for(i = 0; i < 4; ++i) 
36                 printf("%s \n", str[i]);
37
38
39         printf("END OF PROGRAM RUN.");
40         return 0;
41 }

В том же каталоге у меня есть "текст" файл, который содержит следующие строки:

is this a test
this is a test
this is not a test

Однако когда я компилирую и запускаю программу (./a.out txt), я получаю следующий вывод:

this is not a test

this is not a test

this is not a test

END OF PROGRAM RUN.

Очевидно, это означает, что перезаписывается то же место, но я не уверен, как это исправить (как уже говорилось, указатели все еще довольно чужды для меня). Может ли кто-нибудь уточнить, что здесь происходит? Нужно ли вместо этого использовать 2D-массив? Любая помощь будет принята с благодарностью.

Ответы на вопрос(2)

Ваш ответ на вопрос