Jump to content
Fórum Script Brasil
  • 0

Bug no codigo : Segmentation Fault


apprentice
 Share

Question

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...