Estava vendo as funções responsáveis pela leitura e gravação de strings via arquivo texto e me deparei com a função fgets, que recebe como parâmetro um vetor de carácter, a quantidade de strings que serão lidas e o ponteiro que aponta para o meu arquivo texto.
Para tal é necessário que eu aloque em tempo de copilação um vetor com uma quantidade fixa de espaço para armazenar o conteúdo das linhas, como pode ver neste programa-teste que fiz:
#include <stdio.h>#include <stdlib.h>#include <locale.h>int main(void){ FILE *arquivoTexto; char letra; int cont = 0; char temp2[100]; setlocale(LC_ALL, ""); //aceitar acentos arquivoTexto = fopen("teste.txt", "w"); if(!arquivoTexto) //ou arquivoTexto == NULL { printf("Arquivo nao pode ser gravado"); exit(1); } fputs("Isto é um teste para ver se este arquivo\n", arquivoTexto); fputs("texto conseguiu gravar os arquivos adequadamente:\n", arquivoTexto); fputs("Mesmo com quebra de linhas\te inclusive tabulações.\n", arquivoTexto); fputs("Encerro este texto para afirmar que consegui.", arquivoTexto); printf("O arquivo foi gravado corretamente.\nAbra-o para ver\n\n"); fclose(arquivoTexto); arquivoTexto = fopen("teste.txt", "r"); if(!arquivoTexto) //ou arquivoTexto == NULL { printf("Arquivo nao pode ser lido"); exit(1); } while(!feof(arquivoTexto)) { fgets(temp2, 100, arquivoTexto); printf("%s", temp2); } return 0;}
Como vocês percebem, cada linha do meu texto não possui um número fixo de caracteres. Uma delas é maior que a outra. Logo preciso "desperdiçar memória" chutando um valor alto para armazenar as strings.
Gostaria de saber se tenho como alocar dinamicamente este vetor temp2 para que ele armazene a linha, não importa o número de caracteres que ela tenha e como procederia para fazer isto. Ou esta função fgets só aceita vetores estáticos?
trabalhando com arquivos 3.rar