Probleme mit fopen(), fprintf() und fgets(), bzw. fscanf()



  • Hallo Community,

    ich habe ein Problem mit den oben genannten Funktionen.

    Folgenden Code hab ich bisher:

    #include <stdio.h>
    #include <stdlib.h>
    
    struct Adresse
    {
        char Vorname[32];
    	char Nachname[32];
    	int PLZ;
    	char Ort[32];
    	char Strasse[64];
    	int Hausnummer;
    } adressen;
    
    void Adressaufruf ()
    {
    	printf("\nIhre Eingabe lautete: \n\n");
    	printf("Vorname......: %s\n", adressen.Vorname);
    	printf("Nachname.....: %s\n", adressen.Nachname);
    	printf("PLZ..........: %5d\n", adressen.PLZ);
    	printf("Ort..........: %s\n", adressen.Ort);
    	printf("Strasse......: %s\n", adressen.Strasse);
    	printf("Hausnummer...: %d\n", adressen.Hausnummer);
    }
    
    int main (void)
    {
    	printf("Bitte geben Sie den Vorname ein: ");
    	scanf("%s", adressen.Vorname);
    	fflush(stdin);
    	printf("Bitte geben Sie den Nachnamen ein: ");
    	scanf("%s", adressen.Nachname);
    	fflush(stdin);
    	printf("Bitte geben Sie die Postleitzahl ein: ");
    	scanf("%5d", &adressen.PLZ);
    	fflush(stdin);
    	printf("Bitte geben Sie den Ort ein: ");
    	scanf("%s", adressen.Ort);
    	fflush(stdin);
    	printf("Bitte geben Sie die Strasse ein: ");
    	scanf("%s", adressen.Strasse);
    	fflush(stdin);
    	printf("Bitte geben Sie die Hausnummer ein: ");
    	scanf("%d", &adressen.Hausnummer);
    	fflush(stdin);
    
    	Adressaufruf();
    
    	FILE *fp = NULL;
    	char string[128];
    
    	fp = fopen("StructureInhalt.txt", "w+t");
    	if(fp == NULL)
    		{
    			printf("Fehler\n");
    		}
    	fprintf( fp, "%s,%s,%d,%s,%s,%d", adressen.Vorname, adressen.Nachname, &adressen.PLZ, adressen.Ort, adressen.Strasse, &adressen.Hausnummer);
    	fflush(fp);
    	fclose(fp);
    
    	fp = fopen("StuctureInhalt.txt", "r+t");
    	if(fp == NULL)
    	{
    		printf("\nFehler\n");
    	}
    	else
    	{
    	fgets(string, 128, fp);
    	}
    
    	printf("%s", string);
    
    	fclose(fpRead);
    
    	getchar();
    
    	return 0;
    }
    

    Ich hab schon viel versucht, irgendwie bin ich mit meinem Latein gerade am Ende.

    Aufgabenstellung sieht wie folgt aus:

    - Erzeugen einer Datei, in welche der Inhalt meiner struct geschrieben werden soll / CHECK
    - Schließen der Datei / CHECK
    - Erneutes Öffnen der Datei / CHECK
    - Auslesen des Strings in der Datei / FAILED

    Im Debug wird mir immer vorm fgets(), bzw. vor fscanf() in meinem Pointer fp alles mit Bad Ptr ausgegeben...

    Ausgegeben werden mir dann:

    Bitte geben Sie den Vorname ein: Peter
    Bitte geben Sie den Nachnamen ein: Lustig
    Bitte geben Sie die Postleitzahl ein: 12345
    Bitte geben Sie den Ort ein: Ort
    Bitte geben Sie die Strasse ein: Strasse
    Bitte geben Sie die Hausnummer ein: 123

    Ihre Eingabe lautete:

    Vorname......: Peter
    Nachname.....: Lustig
    PLZ..........: 12345
    Ort..........: Ort
    Strasse......: Strasse
    Hausnummer...: 123
    ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
    ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠á╦B

    Kann mir jemand bei meinem Problem helfen?



  • Erstens: Für das "fflush(stdin);" sollte man dich eigentlich vierteilen und anschließend erschießen.

    Zweitens: Wer ist "fpRead"?

    Drittens: Bei fprintf() mußt du keine Variablenadressen angeben, sondern Werte.

    Viertens: Hast du dir mal den Rückgabewert von fgets() angesehen? (oder die Zieldatei im Editor betrachtet?)



  • Erstens: Weshalb zu Kleinholz verarbeiten?
    Es sei gesagt, ich lerne aus einem E-Book, der Inhalt vermittelt folgendes:

    /* scanf3.c */
    #include <stdio.h>
    int main(void) {
       char a,b,c;
       printf("1. Buchstabe : ");
       scanf("%c",&a);
       fflush(stdin);
       printf("2. Buchstabe : ");
       scanf("%c",&b);
       fflush(stdin);
       printf("3. Buchstabe : ");
       scanf("%c",&c);
       printf("Sie gaben ein : %c %c %c ",a,b,c);
       return 0;
    }
    

    Zweitens: fpRead ist noch übrig aus dem Versuch, einen zweiten Pointer zu nutzen, welcher beim Auslesen des Strings aus der Datei verwendet wird.
    Wurde mir von einem Bekannten empfohlen, hat auch nicht geklappt.

    Drittens: Du meinst wegen &adressen.PLZ ?

    Viertens: ‡fgets returned 0x00000000 <Bad Ptr> char *
    Womit ich leider nix anfangen kann 😞



  • lilohne schrieb:

    Erstens: Weshalb zu Kleinholz verarbeiten?
    Es sei gesagt, ich lerne aus einem E-Book, der Inhalt vermittelt folgendes:

    Weil das Verhalten von "fflush(stdin);" nicht definiert ist - bei MS erhältst du das erwartete(?) Ergebnis, auf anderen Systemen pulverisierst du dir damit möglicherweise das Programm. Und es ist besser, du lernst es gleich richtig, als irgendwann damit konfrontiert zu werden.

    Zweitens: fpRead ist noch übrig aus dem Versuch, einen zweiten Pointer zu nutzen, welcher beim Auslesen des Strings aus der Datei verwendet wird.
    Wurde mir von einem Bekannten empfohlen, hat auch nicht geklappt.

    Hast du es schonmal mit freopen() versucht? (oder einfach nur mit rewind())

    Drittens: Du meinst wegen &adressen.PLZ ?

    Ja

    Viertens: ‡fgets returned 0x00000000 <Bad Ptr> char *
    Womit ich leider nix anfangen kann 😞

    Woher genau stammt diese Fehlermeldung denn jetzt? Für mich sieht das so aus, als ob du einen NULL-Zeiger übergeben hättest - aber das passt nicht wirklich zum Code.



  • freopen() hab ich versucht, hat leider nichts geholfen.
    rewind() direkt hab ich noch nicht versucht aber mit fseek(), was ja den selben Effekt hat, oder?

    Adressoperator wurde entfernt 🙂

    FILE *fp = NULL ergibt bei mir folgendes:

    - fp 0x00000000 {_ptr=??? _cnt=??? _base=??? ...} _iobuf *
    + _ptr CXX0030: Error: expression cannot be evaluated char *
    _cnt CXX0030: Error: expression cannot be evaluated int
    + _base CXX0030: Error: expression cannot be evaluated char *
    _flag CXX0030: Error: expression cannot be evaluated int
    _file CXX0030: Error: expression cannot be evaluated int
    _charbuf CXX0030: Error: expression cannot be evaluated int
    _bufsiz CXX0030: Error: expression cannot be evaluated int
    + _tmpfname CXX0030: Error: expression cannot be evaluated char *

    Ist das überhaupt noch okay?

    fp = fopen liefert

    - fp 0x0042cba0 {_ptr=0x00000000 <Bad Ptr> _cnt=0 _base=0x00000000 <Bad Ptr> ...} _iobuf *
    + _ptr 0x00000000 <Bad Ptr> char *
    _cnt 0 int
    + _base 0x00000000 <Bad Ptr> char *
    _flag 128 int
    _file 3 int
    _charbuf 0 int
    _bufsiz 0 int
    + _tmpfname 0x00000000 <Bad Ptr> char *

    Nach dem fprintf steht in fp folgendes:

    - fp 0x0042cba0 {_ptr=0x00323990 "ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ" _cnt=4072 _base=0x00323978 "Peter,Lustig,12345,Ort,Strasse,34ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ" ...} _iobuf *
    + _ptr 0x00323990 "ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ" char *
    _cnt 4072 int
    + _base 0x00323978 "Peter,Lustig,12345,Ort,Strasse,34ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ" char *
    _flag 138 int
    _file 3 int
    _charbuf 0 int
    _bufsiz 4096 int
    + _tmpfname 0x00000000 <Bad Ptr> char *

    Und sobald im Debug der fclose(fp);
    ausgeführt ist und auf den nächsten fopen gesprungen wird, passiert folgendes:

    - fp 0x0042cba0 {_ptr=0x00000000 <Bad Ptr> _cnt=0 _base=0x00000000 <Bad Ptr> ...} _iobuf *
    + _ptr 0x00000000 <Bad Ptr> char *
    _cnt 0 int
    + _base 0x00000000 <Bad Ptr> char *
    _flag 0 int
    _file 3 int
    _charbuf 0 int
    _bufsiz 4096 int
    + _tmpfname 0x00000000 <Bad Ptr> char *

    Danach folgt der von mir gezeigte Wert in fgets...



  • *ganz genau hinschaut* Das scheint wohl doch nur ein Schusselfehler zu sein - du schreibst in die Datei "StructureInhalt.txt" und liest anschließend aus der "StuctureInhalt.txt" (die natürlich leer ist).

    Btw, mit "Rückgabewert" meinte ich nicht die Debugger-Ausgaben, sondern den Wert, den fgets() zurückliefert:

    char* input = fgets(...);
    if(input==NULL)
      printf("Fehler beim Lesen\n");
    

    PS: Mit den elend langen Ausgaben zerlegst du nur das Forum-Design.



  • Autsch...
    Der Fehler hat mich gestern geschlagene sechs Stunden gekostet...

    Vielen Dank für deine Hilfe 🙂



  • Vorschlag für's nächste Mal - pack den Dateinamen in eine Konstante, dann fallen Tipfehler schneller auf (und du hast es später einfacher, den Namen vom Nutzer vorgeben zu lassen).


Anmelden zum Antworten