Pergunta

#include <stdio.h>
#include <stdlib.h>

int main() 
{
     FILE *fp = fopen("lr.txt", "r");
     fseek(fp, 0L, SEEK_END);
     int size = ftell(fp);
     fseek(fp, 0L, SEEK_SET);

     char *lorem_ipsum;

     int i = 0;
     lorem_ipsum = (char*) malloc(sizeof(char) * size);
     while(fscanf(fp, "%s\n", lorem_ipsum) != EOF)
     {
      printf("%s", lorem_ipsum[i]);
      i++;

     }
     fclose(fp);
     return 0;
}

Este programa compilado e correu, no entanto, o que aconteceu foi que eu tenho um segfault e eu não sei bem exatamente o que há de errado com este programa. Alguém poderia me ajudar com o erro ponteiro eu tenho?

Foi útil?

Solução

Você está tentando imprimir lorem_ipsum[i] como se fosse uma corda. lorem_ipsum é uma string, então lorem_ipsum[i] é apenas um personagem.

O segfault acontece porque a aparência printf o valor do caractere no lorem_ipsum[i] e interpreta-o como um char * ponteiro (uma string). Naturalmente, o valor do caractere não corresponde a um endereço de memória alocada válido.

Outras dicas

Você está passando uma char (lorem_ipsum[i]) para a função fscanf, que espera um char* como argumento.

Você pode querer usar lorem_ipsum ou lorem_ipsum+i se você realmente quer retirar os primeiros caracteres i off.

Você pode explicar o que você está tentando fazer no loop for?

Parece-me que está a tentar ler o arquivo linha por linha e, em seguida, imprimir a linha. No entanto, quando você faz o printf ( "% s", lorem_ipsum [i]), você está enviando um personagem, não uma string.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top