Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MichelleAraujo

Lendo cada caractere de um arquivo e armazenando em uma array

Recommended Posts

Olá pessoal, tudo bem?

 

Estou com um certo probleminha e empaquei nele.

É o seguinte: quero ler um arquivo e armazenar cada caractere de uma linha em uma array.

Quando encontrasse o final da linha, iria fazer as funções necessárias, pulava para a outra linha e iria salvar na mesma array cada caracter da outra linha, assim sucessivamente até o fim do arquivo.

Porque estou querendo fazer isso? Porque quem for escrever o arquivo vai colocar '\t', '\n', '\a' para indicar tab, quebra de linha e beep, como nós fazemos em C. Se eu armazenar cada linha em uma string, como estava fazendo anteriormente, o C irá interpretar '\t', '\n', e '\a' como um caractere. Então, o ideal é salvar cada caracter da linha em uma string.

 

Segue onde eu empaquei no código:

while (!feof(arquivo)){
		while (getc(arquivo)!='\n'){
			temp[i]=getc(arquivo);
			i++;
		}
		/*FAZER AS FUNÇÕES NECESSÁRIAS*/
	}

O erro que ele está dando, de acordo com o gdb, é malloc. E como vou trabalhar com malloc nesse caso?

 

Agradeço desde já e aguardo repsostas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha... Você não especificou o contexto do programa, i. e., você quer ler uma linha ou o arquivo inteiro?

 

Pelo que vi, há alguns erros gritantes no seu código.

 

A cada vez que a função getc é chamada o caractere apontado pelo indicador de posição interno do fluxo é retornado e o indicador incrementado (ou algo assim).

 

Você está descartando caracteres ao não salvar seu valor em uma variável, ou seja, o certo seria algo semelhante à:

while((c = getc(arquivo)) != EOF)
{
    if(c == '\n') break;
    temp[i++] = c;
}
Como você apenas postou um fragmento descontextualizado do código fica difícil descobrir, com certeza, quais são os erros, porém irei deixar um exemplo de como usar o malloc para armazenar um arquivo na memória:

#include <stdlib.h>
#include <stdio.h>

//#define RESET

inline long int
file_size (FILE* fl)
{
	long int sz, p;

	p = ftell(fl);
	fseek(fl, 0L, SEEK_END);
	sz = ftell(fl);
	fseek(fl, p, SEEK_SET);

	return sz;
}

int main(int argc, char **argv)
{
	long int i = 0;
	FILE* arquivo;
	char *temp;
	int c = 0;

	if((arquivo = fopen("./nome", "rb")) == NULL)
	{
		perror("fopen");
		abort();
	}

	if((temp = malloc(sizeof(char) * file_size(arquivo) + 1)) == NULL)
	{
		perror("malloc");
		abort();
	}

	while (c != EOF)
	{
#ifdef RESET
		i = 0;
#endif

		while((c = getc(arquivo)) != EOF)
		{
			if(c == '\n') break;
			temp[i++] = c;
		}
		temp[i] = '\0';
		/*FAZER AS FUNÇÕES NECESSÁRIAS*/
	}

	puts(temp);
	fclose(arquivo);
	free(temp);
	return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Mateus,

 

Primeiramente, peço desculpas pela demora.

E, realmente, me expressei mal. O que queria mesmo era salvar uma linha do arquivo até ele encontrar a quebra de linha (que era a indicação de que a linha acabou).
Pesquisei e acabei descobrindo o fgets que tem a mesma função, sendo que, o exemplo seguinte, temp1 é uma string que armazena a linha.

while (fgets(temp1, sizeof temp1, arquivo) != NULL) {
	// OPERAÇÕES //
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.