Gawayn
Erfahrenes Mitglied
Ich habe das Programm nicht ausprobiert, sondern sage erstmal einige Fehler, die mir auf den ersten Blick ins Auge stechen.
Du definierst:
Das ist kein String, sondern ein Array von 10 Zeigern auf Strings. Ein String ist das hier:
Desweiteren dereferenzierst du die Variable überall, Beispiel:
Der Ausdruck *string zeigt auf nicht initialisierten Speicher. fgets() kann nicht mit einem Zeiger auf einen String funktionieren, der im Speicher überhaupt nicht existiert. Das bedeutet: Wenn man einen String als char* definiert, ist zu diesem Zeitpunkt noch kein Speicher für diesen String reserviert. Dies geschieht erst bei einer Zuweisung. fgets() aber reserviert nicht selbst Speicher, sondern erwartet einen Zeiger auf einen bereits reservierten Speicherbereich. Übergibt man ihm einen char*, so schreibt fgets() seine Daten an irgendeine zufällige Stelle im Speicher, auf die der char* gerade zeigt, was einen Zugriffsfehler verursacht. Folgendermaßen wäre es korrekt:
Der fscanf-Befehl wird zwar korrekt angewandt, allerdings ist x ein Zeiger auf einen double, der fscanf-Befehl möchte jedoch gerne einen float.
Versuch mal, die genannten Fehler da rauszukriegen.
Gawayn
Du definierst:
Code:
char *string[10];
Das ist kein String, sondern ein Array von 10 Zeigern auf Strings. Ein String ist das hier:
Code:
char *string ;
Desweiteren dereferenzierst du die Variable überall, Beispiel:
Code:
//fgets(*string, 8, stream ) ;
Der Ausdruck *string zeigt auf nicht initialisierten Speicher. fgets() kann nicht mit einem Zeiger auf einen String funktionieren, der im Speicher überhaupt nicht existiert. Das bedeutet: Wenn man einen String als char* definiert, ist zu diesem Zeitpunkt noch kein Speicher für diesen String reserviert. Dies geschieht erst bei einer Zuweisung. fgets() aber reserviert nicht selbst Speicher, sondern erwartet einen Zeiger auf einen bereits reservierten Speicherbereich. Übergibt man ihm einen char*, so schreibt fgets() seine Daten an irgendeine zufällige Stelle im Speicher, auf die der char* gerade zeigt, was einen Zugriffsfehler verursacht. Folgendermaßen wäre es korrekt:
Code:
char string[1024] ;
// blablabla
fgets( string, sizeof( string ), stream ) ;
Der fscanf-Befehl wird zwar korrekt angewandt, allerdings ist x ein Zeiger auf einen double, der fscanf-Befehl möchte jedoch gerne einen float.
Versuch mal, die genannten Fehler da rauszukriegen.
Gawayn
Zuletzt bearbeitet: