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 :(