• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gravecard

Carregar linhas para um vector de strings

2 mensagens neste tópico

Boas tardes...

A minha dúvida é o seguinte, tenho de criar uma função que carregue as linhas de um ficheiro para um vector de strings então até agora tenho isto, não se importem com protótipos nem nada do género só queria mesmo compreender como passar cada linha para o vector:


#define MAX 1024

/* Declaração de variáveis */

FILE *ficheiro;
int contador = 0,i;
char linha_ficheiro_maximo[MAX];
char **array;


/*Código para abertura do ficheiro e etc*/

while (fgets(linha_ficheiro_maximo,MAX,ficheiro))
{
contador ++; //conta o número de linhas do ficheiro. Depois vai ser alterado com recurso a pipes + comando wc -l
}

array = (char**) malloc(contador*sizeof(char*));

while (fgets(linha_ficheiro_maximo,MAX,ficheiro) != NULL)
{

	for (i=0;i<contador;i++) // a minha dúvida está nesta parte pois não vejo nenhuma maneira de passar o conteúdo das linhas
	{
		strcpy(array[i],linha_ficheiro);
	}
}


/*resto do código*/

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vê as alterações que fiz:

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

#define MAX 1024

int main(void) {

/* Declaração de variáveis */

        FILE *ficheiro;
        int contador = 0,i;
        char linha_ficheiro_maximo[MAX];
        char **array;


/*Código para abertura do ficheiro e etc*/

ficheiro = fopen("texto.txt","r");
if (!ficheiro) exit(EXIT_FAILURE);
while (fgets(linha_ficheiro_maximo,MAX,ficheiro))
{
        contador++; //conta o número de linhas do ficheiro. Depois vai ser alterado com recurso a pipes + comando wc -l
}

array = (char**) malloc(contador*sizeof(char*));
rewind(ficheiro);
i=0;
while (fgets(linha_ficheiro_maximo,MAX,ficheiro) != NULL && i<contador)
        {

                 // a minha dúvida está nesta parte pois não vejo nenhuma maneira de passar o conteúdo das linhas
                        linha_ficheiro_maximo[strlen(linha_ficheiro_maximo)-1]='\0';
                        array[i]=(char*)strdup(linha_ficheiro_maximo);
                        printf("%s\n",array[i]);
                        i++;

        }
        fclose(ficheiro);
        return 0;

Uma vez que percorres o ficheiro todo 1 vez para saber o tamanho do array que vais criar, tens de fazer o rewind do file pointer após essa contagem, pois este vai estar a apontar para o fim do ficheiro. Depois basta iniciares um iterador e, em cada iteração, lês a string, retiras o '\n' final e duplica-la (através do strdup e não do strcpy, pois o strdup faz o malloc necessário para armazenar a string: http://www.opengroup.org/onlinepubs/009695399/functions/strdup.html) para a respectiva posição no array.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora