questões ponteiro com o programa de I / O de arquivos básico C
-
21-08-2019 - |
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?
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.