Jump to content

Carregar linhas para um vector de strings


Gravecard

Recommended Posts

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*/
Link to comment
Share on other 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.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.