Lendo um arquivo linha por linha em C

Eu estou tentando escrever algum código que irá abrir um arquivo, ler seu conteúdo linha por linha e armazenar cada uma dessas linhas em uma matriz.

Primeiro eu abro o arquivo e conto o número de linhas, cada uma das linhas é de um tamanho fixo, então eu simplesmente faço isso:

    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);

Até agora, isso funciona bem, number_of_lines é de fato o número de linhas no arquivo "toSend2" e cada um dos meus printf são as linhas contidas nesse arquivo.

Agora, com o número de linhas, eu crio uma matriz de strings e, em seguida, basicamente percorro todo o arquivo novamente, mas, desta vez, gostaria de armazenar cada uma das linhas na matriz (provavelmente há uma maneira melhor de descobrir o número de linhas em um arquivo, mas tudo o que eu tentei falhou!)

    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);

Isso, obviamente, não funciona: cada um dos meus printf é a linha certa mais a última linha do arquivo, por exemplo, o primeiro printf seria:

FILE 2 LINEEEEEEE: "1a linha do arquivo" "última linha do arquivo"

E depois disso, quando eu traço o conteúdo da minha matriz, cada item é simplesmente a última linha do arquivo. Eu acho que isso é porque eu simplesmente coloco o mesmo ponteiro (apontando para uma linha diferente naquele momento) no array a cada vez, mas no final ele apontará para a última linha, portanto tudo será a última linha.

Como eu resolveria meu problema?

p.s .: Eu acabei de começar C, então, por favor, não assuma que eu sei mesmo as coisas básicas sobre isso :(

questionAnswers(3)

yourAnswerToTheQuestion