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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top