I want to read lines of a text file, and the content of it is as below.
first
second
third  
I've already written some code, but the result was different from what I expected. I hope you can help me a little. (code below)
/*
content of test.txt
first
second
third
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
  // double pointer for two string lines
  // and the two string lines will be pointed by (char *) pointer
  FILE *fp = fopen("test.txt", "r");
  char **lst = malloc(3 * sizeof(char *));  // corrected 2 -> 3
  // read lines until feof(fp) is not Null
  // Only 2 lines will be read by this loop
  int i = 0;
  while (!feof(fp)) {
    char line[10];
    fgets(line, 10, fp);
    *(lst + i) = line;
    printf("%d : %s", i, *(lst + i));
    i++;
  }
  /*
  Result:
  0 : first
  1 : second
  2 : third     // Why was this line printed here?
  There are 3 lines, not 2 lines!
  */
  printf("\n\n");
  int j;
  for (j = 0; j < i; j++) {
    printf("%d : %s\n", j, *(lst + j));
  }
  /*
  result:
  0 : third
  1 : third
  2 : third
  The whole lines were not printed correctly!
  */
  free(lst);
  return 0;
}
Expected output:
0 : first
1 : second
2 : third  
Many thanks.
 
    