PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage So verwenden Sie die einfache Dateieingabe und -ausgabe in C



SarthakBhatt
15.07.2022, 13:12
Könnte mir irgendwann jemand freundlicherweise mitteilen, wie wichtige Dateieingaben und -ausgaben in C durchgeführt werden sollen. Ich habe versucht, zu scannen, aber ich konnte nur Antworten für C++ und so weiter bekommen.

Ich versuche, fscanf und fprintf zu verwenden, um dies zu tun. Das Programm stürzt jedoch ab, sobald es diesen Teil ausführt, mit der Fehlermeldung: „Unbehandelte Ausnahme bei 0x50D39686 (msvcr120d.dll) in Test Project.exe: 0xC0000005: Zugriffsverletzung beim Schreiben von Speicherort 0xCCCCCCCC.


#include <stdio.h>

#include <stdlib.h>
#include <string.h>
#include <math.h>

int main()

{
double things_in_file[6];
int counter;
FILE *file_cats;

if ((file_cats = fopen("cats.txt", "r")) == NULL)
{
printf("This file doesn't exist.\n");
system("pause");
exit(-1);
}

for (counter = 0; counter <= 5; counter = counter + 1)
{

fscanf(file_cats, "%lf\n", &things_in_file[counter]);
printf("%f\n", things_in_file[counter]);

}

fclose("file_cats");
system("pause");

exit(0);

Can somebody Please help with this?

ugeek
16.07.2022, 14:57
Hallo SarthakBhatt,

der Fehler steckt in dieser Zeile

fclose("file_cats");
Die Anführungszeichen (Gänsefüßchen) sind hier fehl am Platz.
Die Variable file_cats enthält einen Pointer auf irgendeinen Speicherbereich, der Informationen rund um die offene Datei enthält.
Du übergibst jedoch dem fclose-Befehl versehentlich einen Zeiger auf den festen String "file_cats" (und alles, was danach kommt).
Dieser befindet sich zudem in einem aus Sicherheitsgründen schreibgeschützen Speicherbereich, nämlich einer im RAM befindlichen Kopie der exe-Datei.
Ein guter Compiler sollte solche Fehler erkennen.
Versuch mal, ob du bei deinem Compiler Warnmeldungen oder ähnliches aktivieren kannst.

So wird es funktionieren:

fclose(file_cats);
Damit ist schon mal der konkrete Fehler aus der Welt geschafft.

Darüber hinaus habe ich noch ein paar kleinere Überarbeitungen vorgenommen,
so dass es den meines Wissens üblichen Gepflogenheiten entspricht.
Man kann sich so einfach besser miteinander austauschen.
Saubere Einrückungen sind wichtig, damit man leichter auf eine Blick sieht, was wie zusammengehört.

Ich hoffe, ich konnte dir ein bisschen weiterhelfen, und wünsche dir viel Erfolg mit C.



#include <stdio.h>

int main(int argc, char **argv)
{
double numbers[6] = {0,0,0,0,0,0};
int i;
FILE *fp;

if ((fp = fopen("cats.txt", "r")) == NULL)
{
printf("This file doesn't exist.\n");
return 1; /* ungleich 0 heisst Fehler */
}

for (i=0; i < 6; i++)
{
if(1 == fscanf(fp, "%lf\n", numbers + i))
{
printf("numbers[%d] = %f\n", i, numbers[i]);
}
else
{
printf("error reading numbers[%d.\n", i);
}
}

fclose(fp);
return 0; /* 0 heisst OK */
}