Ir para conteúdo
Fórum Script Brasil
  • 0

Bug no codigo : Segmentation Fault


apprentice

Pergunta

Ola pessoal,

 

             Estou escrevendo um codigo que pega dados de um arquivo txt e salva cada linha em uma posicao de um array, so que isso não acontece, ele salva uma linha e depois da o erro : "Segmentation Fault (core dumped)" . Abaixo coloco o codigo para melhor visualizacao do problema , já li em alguns foruns e materiais que esse erro se da quando o programa tenta acessar algum endereco de memoria improprio , uso sim um ponteiro , pois a funcao fgets so roda dessa forma. Enfim nos materiais que acho não estou conseguindo sanar o problema , peco humildemente a ajuda de vocês , Obrigado desde já!

 

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


int main(void)
{
    char url[]="cadastro.txt";
    char ch[500];
        char *array[500]  ;
        int i=0 ;
    FILE *arq;
    
    arq = fopen(url, "r");
    if(arq == NULL)
        printf("Erro, não foi possivel abrir o arquivo\n");
    else
          while((fgets(ch , 500 ,arq)) != NULL);
                {
                   
                  
                   strcpy(array ,ch);
                   printf("%s", array);
                   i++;
                 }
        
         
        fclose(arq);


         printf("%s\n", array[0]);

       
              
    return 0;
}

 

P.S.: Estou compilando e executando no gcc...

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Ola!

 

Olha sou iniciante C, sem contar que não estou nada bem ultimamente para analisar o código de outros ususarios, mas vamos lá . . .

 

Eu não entendi muito bem o que você quis fazer, mas, o principal problema que vejo é o de que você fez uma confusão com o vetor que vai armazenar as strings.

 

char ch [ 500 ];

char *array[500];

 

nas duas linhas acima você está especificando variáveis que irão armazenar cada, uma ÚNICA string com um tamanho de 500 elementos, que dependendo do que você quer fazer é perfeitamente aceitavel, mas se você quer ler linha por linha e salvar cada uma em um posição de um vetor, você deve fazer algo similar a isto:

 

char ch [ 10 ] [ 500 ];

char *array [ 10 ] [500];

 

onde o [ 10 ] indica o numero de elementos do tipo string que o ( vetor de strings ) vai possuir, e o [ 500 ] o numero de elementos ( caracteres ) que cada elemento do vetor vai possuir.

 

Se é isso, que você quer fazer, eu não sei dizer exatamente como isso seria feito usando o laço ( while ), da forma que você usou, porem tenho uma noção básica de como você poderia fazer usando o laço ( for ):

 

int main(void)

{
    char url[] = "cadastro.txt";
    char ch [ 3 ] [ 60 ];

    int k = 0;
    int i = 0;

    FILE *arq;

    arq = fopen ( url, "r" );

    if ( arq == NULL )
      {
         printf ( "\nErro, não foi possivel abrir o arquivo\n" );
      }
      else
          {
             for ( k = 0; k < 3; k++ )
                {
                  fgets ( ch [ k ], 60 , arq );
                }
            fclose ( arq );
          }


       for ( i = 0; i < 3; i++ )
          {
              printf ( "\n%s", ch [ i ] );
          }

    return 0;
}

 

Como eu disse, esta é uma noção basica de como voce poderia fazer usando um laço ( for ), sem contar que na maioria dos meus codigos, eu uso está estrutura para ler os dados, mas é claro que dependendo do que voce queira fazer pode não ser muito util para o seu caso, e como já deixei claro não estou muito bem para analisar outros codigos ultimamente!

 

Bom por hora é só . . . veja se com as dicas e o codigo acima voce consegue alguma luz . . .

 

Ubuntu 14.04  GCC 4.8  CodeBlocks 13.12

 

Espero Ter Ajudado ! ! !

 

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...