Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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]);   

} 
}

 

Editado por Simon Viegas
Alterar tipo de code para C Languages

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






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

×