Ir ao conteúdo
  • Cadastre-se
Aislan Silva Costa

C Erro ao retornar matriz bidimensiona após termino de strtok

Recommended Posts

Boas a todos!

 

Tenho esse código porém não consigo identificar o erro que esta acontecendo (falha de segmentação) creio que seja dentro do while que verifica se o token e diferente de nulo. Alguém pode dar uma olhada e me ajudar?

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include "/opt/azulaoServer/headers/urls.h"


typedef struct endereco
{
  char logradouro[30];
  char numero[4];
  char bairro[20];
  char estado[2];
  char cidade[30];
  char cep[15];
  }Endereco;

typedef struct Cliente
    {

     char cpf[13];
    char realName[60];
    char sexo[11];
    char key[15];
    char data[11];
    Endereco endereco;

}Cliente;



   char **QuebrarStringCompleta(char *string)
  {

   char **linha;
   char *token;
   int tamVetor = 1;

   int i = 0;

          linha  = malloc(sizeof(char*)*tamVetor);

   linha[i] = malloc(sizeof(char**)*150);

   token = strtok(string, "\n");

   strcpy(linha[i], token);
   printf("primeira linha e: %s\n", linha[i]);

   i++;
   tamVetor++;


while (token != NULL)
    {


    linha = realloc(linha, sizeof(char*)*tamVetor);

   linha[i] = malloc(sizeof(char**)*150);

   token = strtok(NULL, "\n");

   strcpy(linha[i], token);
   printf("linha e: %s\n", linha[i]);

   i++;       
   tamVetor++;




            }
   printf("chegamos antes do return\n");
  return linha;
   }



  Cliente QuebrarStruct( char *string)
 {
    printf("a fincao foi chamda para quebrar a strict\n");

    printf("a string aqui e : %s\n", string);

Cliente cliente;
char *token;

token = strtok(string,",");
 printf("passou telo token, ele e %s\n", token);
    strcpy(cliente.cpf, token);

        printf("cliente.cpf e: %s\n", cliente.cpf);

        token = strtok(NULL,",");
printf("passou telo token e: %s\n", token);
    strcpy(cliente.realName, token);

        printf("cliente.realName e: %s\n", cliente.realName);


        token = strtok(NULL,",");
     printf("passou pelo token de separar o sexo\n");
    strcpy(cliente.sexo, token);
    printf("antes do printf\n");
    printf("sexo do cliente e: %s\n", cliente.sexo);

    /*
        token = strtok(NULL,",");

    strcpy(cliente.email, token);

    */
    printf("antes do tokrn, para separar a data\n");
        token = strtok(NULL,",");
        printf("passou pelo token de separar a data\n");

    strcpy(cliente.data, token);
        printf("data do cliente e: %s\n", cliente.data);

        printf("dados e, usuario: %s, nome real: %s, sexo: %s, data: %s\n", cliente.cpf,cliente.realName, cliente.sexo, cliente.data);
    return cliente;

}




char * LerDados(int flag)
{

Cliente cliente;

FILE *users;                // cria variável ponteiro para referenciar na 
                            // memoria um tipo de arquivo txt, no caso o
                            // user.txt





// url q se encontra o arquivo users.txt


// # define BUFFER_SIZE 1024 
// char buf [ BUFFER_SIZE ] ; 



// abrindo o arquivo com tipo de abertura w

 if (flag == 1)
 {  
  users = fopen(url, "r");

 }
 if (flag == 2)
{
users = fopen(urlprodutos,"r");

}

if (flag == 4)
{
    users = fopen(urladmin,"r");

}

if (flag == 5)
{
    users = fopen(urladminsKeys,"r");

}
    char *auxiliar;


// testando se o arquivo foi realmente criado
 if (users == NULL)
 {
    printf("Erro na abertura do arquivo!");
    return 1;
  }
  else
  {

    char *lido;



    int i = 0;
    char *string;
    int tamVetor = 0;

    int a = 0;
    char *string2;
    int tamVetor2 = 0;

            char *pch;
    char *token;
    char comparador[15];

        int flag = 1;

        strcpy(auxiliar,"");

    string = malloc(sizeof(char **) * tamVetor);


    string2 = malloc(sizeof(char **) * tamVetor2);

     while ((lido = fgetc(users)) != EOF)
    {
        if (lido == '#')
        {

            while ((lido = fgetc(users)) != EOF)
            {

    printf("lido tem: %c\n", lido);
                string[i] = lido;
                                    strcat (auxiliar, string);
//      printf("copiou\n");

                tamVetor++;

                string = realloc(string, sizeof(char *) * tamVetor);



                            }
                    }
             }
            printf("String e : %s\n", auxiliar);

    }


            return auxiliar;

}



int main ()

 {


 char *string;
 char **result;



 string = LerDados(1);

 printf("String e %s: ", string);


 result = QuebrarStringCompleta(string);

//result = matrizExemplo();
 printf("as linhas separadas sao: ");

 for(int i = 0; i < 5; i++)
{
  printf("%s\n", result[i]);   

} 
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×