Gravecard Posted November 11, 2009 at 05:12 PM Report Share #295608 Posted November 11, 2009 at 05:12 PM 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 More sharing options...
Baderous Posted November 11, 2009 at 05:53 PM Report Share #295623 Posted November 11, 2009 at 05:53 PM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now