Чтение файла построчно в C

Я пытаюсь написать некоторый код, который откроет файл, прочитает его содержимое построчно и сохранит каждую из этих строк в массив.

Сначала я открываю файл и считаю количество строк, каждая из которых имеет фиксированную длину, поэтому я просто делаю это:

    char buf2[LINE_LENGTH];
    int in2 = open("toSend2", O_RDONLY);
    int number_of_lines = 0;

    for (;;)
 {
  char* p2 = buf2;
  int count = read (in2, p2, LINE_LENGTH);
  if (count < 0)
  {
    printf("ERROR");
    break;
  }
  if (count == 0) break; 

  number_of_lines++;

  printf("count: %d \n",count);
  printf("File 2 line : %s", p2);
  printf("\n");

 }
 close (in2);

Пока это работает хорошо, number_of_lines - это действительно количество строк в файле "toSend2", и каждый из моих printf - это строки, содержащиеся в этом файле.

Теперь, с количеством строк, я создаю массив строк, а затем в основном снова просматриваю весь файл, но на этот раз я хотел бы сохранить каждую из строк в массиве (возможно, есть лучший способ узнать число строк в файле, но все, что я пробовал, провалилось!)

    char * array[number_of_lines];
    int b=0;
    int in3=0;
    in3 = open("toSend2", O_RDONLY);
    for (;;)
 {
  char* p3 = buf3;
  int count = read (in2, p3, LINE_LENGTH);
  if (count < 0)
  {
    printf("ERRORRRRRR");
    break;
  }
  if (count == 0) break;


  array[b] = p3;
  b++;

  printf("count: %d \n",count);
  printf("FILE 2 LINEEEEEE : %s", p3);
  printf("\n");

 }  
 close(in3);

Это, конечно, не работает: каждый из моих printf - это правильная строка плюс последняя строка файла, например, первый printf будет:

ФАЙЛ 2 LINEEEEEEE: "1-я строка файла" "последняя строка файла"

И после этого цикла for, когда я отслеживаю содержимое моего массива, каждый элемент в нем является просто последней строкой файла. Я думаю, это потому, что я просто помещаю один и тот же указатель (указывающий на другую строку в тот момент) в массив каждый раз, но в конце он будет указывать на последнюю строку, поэтому все будет последней строкой.

Как бы я решил мою проблему?

ps .: Я только начал C, поэтому, пожалуйста, не думайте, что я знаю даже основные вещи об этом :(

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

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