Frage

#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;
}

Dieses Programm kompiliert und lief, aber was geschah, war, dass ich ein segfault bekam und ich weiß nicht ganz genau, was mit diesem Programm falsch ist. Könnte mir jemand mit dem Zeiger Fehler helfen, ich habe?

War es hilfreich?

Lösung

Sie versuchen lorem_ipsum[i] zu drucken, als ob es sich um eine Zeichenfolge waren. lorem_ipsum ist eine Zeichenfolge, so lorem_ipsum[i] ist nur ein Zeichen.

Die segfault geschieht, weil printf auf dem Wert des Zeichens an lorem_ipsum[i] sieht und interpretiert sie als char * Zeiger (ein String). Selbstverständlich ist der Wert des Zeichens entspricht nicht eine gültige, zugeordneten Speicheradresse.

Andere Tipps

Sie vorbei ein char (lorem_ipsum[i]) an die fscanf-Funktion, die eine char* als Argument erwartet.

Sie möchten vielleicht lorem_ipsum oder lorem_ipsum+i verwenden, wenn Sie wirklich aus der ersten i Zeichen wollen abzustreifen.

Können Sie erklären, was Sie versuchen, in der for-Schleife zu tun?

Es scheint mir, dass Sie versuchen, die Datei Zeile für Zeile zu lesen und dann die Zeile drucken. Wenn Sie jedoch den printf tun ( "% s", lorem_ipsum [i]), werden Sie ein Zeichen zu senden, kein String.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top