problemi Pointer con il programma di base di file C di I / O
-
21-08-2019 - |
Domanda
#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;
}
Questo programma compilato e corse, però, quello che è successo è stato che ho avuto un segfault e non so esattamente tutto ciò che c'è di sbagliato con questo programma. Qualcuno potrebbe aiutarmi con l'errore di puntatore ho ottenuto?
Soluzione
Si sta cercando di stampare lorem_ipsum[i]
come se si trattasse di una stringa. lorem_ipsum
è una stringa, quindi <=> è solo un personaggio.
Il segfault avviene perché printf esamina il valore del carattere a <=> e lo interpreta come un char * puntatore (una stringa). Naturalmente, il valore del carattere non corrisponde ad un indirizzo di memoria allocata valido.
Altri suggerimenti
Si sta passando un char
(lorem_ipsum[i]
) al fscanf
funzione, che si aspetta un char*
come argomento.
Si potrebbe desiderare di utilizzare lorem_ipsum
o lorem_ipsum+i
se si vuole veramente mettere a nudo i primi i
caratteri off.
Ci può spiegare cosa si sta cercando di fare nel ciclo for?
Mi sembra che si sta tentando di leggere il file riga per riga e quindi stampare la linea. Tuttavia, quando si esegue il printf ( "% s", lorem_ipsum [i]), si invia un personaggio, non è una stringa.