mit fgets einlesen



  • Hallo,

    Ich habe ein Problem beim einlesen einer Zeile mit fgets() .
    Ich möchte erstmal nur die erste Zeile aus der .csv Datei auslesen und ausgeben.
    Mein Problem besteht darin das mein Programm beim starten einfach abstürzt.
    Leider sind meine Programmierkenntnisse sehr gering.
    Die .csv Datei befindet sich im gleichen Ordner wie das Programm.

    Hier erstmal der Quellcode

    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    
    #define MAX 800
    
    char buffer[MAX];
    void einlesen (void);
    int main(void)
    {
        einlesen();
        printf("%c \n",buffer);
        _getch();
    }
    
    void einlesen(void)
    {
        FILE *datei;
        datei = fopen("test.csv", "r");
        fgets(buffer,MAX,datei);
        if (datei == NULL)
        {
            printf("Datei kann nicht geoeffnet werden.\n");
            return 0;
        }
    }
    

    Beim building bekomme ich keine Fehler oder Warnungen.
    Jedoch sagt mir der Debugger folgendes:

    Program received signal SIGSEGV, Segmentation fault.
    In ntdll!RtlEnumerateGenericTableLikeADirectory () (C:\WINDOWS\system32\ntdll.dll)
    


  • Zunächst solltest du erst prüfen, ob das Öffnen geklappt hat, bevor du versuchst die Datei zu lesen.

    Zusatzbemerkungen:
    - der Formatstring für die Ausgabe passt nicht zu den übergebenen Parametern
    - globale Variablen sind böse
    - und eine void-Funktion sollte eigentlich keinen Wert zurückgeben



  • Wirklich ohne Warnungen?
    Das bezweifle ich.

    Probiere mal:

    #include <stdio.h>
    #include <stdlib.h>
    
    char buffer[BUFSIZ];
    void einlesen (void);
    int main(void)
    {
        einlesen();
        printf("%s \n",buffer);
        return 0;
    }
    
    void einlesen(void)
    {
        FILE *datei;
        datei = fopen("test.csv", "r");
    
        if (datei == NULL)
        {
            perror("test.csv");
            return;
        }
        fgets(buffer,BUFSIZ,datei);
        fclose(datei);
    }
    


  • Danke Jungs, der Fehler lag wohl am Formatstring für die Ausgabe UND am Dateinamen.
    Hatte nämlich auf meinen Laptop die Dateiendungen ausgeblendet und somit hieß meine Datei test.csv.csv .
    Meine if Anweisung nach dem fgets war auch nicht sonderlich schlau positioniert.
    Vielen Dank für eure Hilfe 👍


Anmelden zum Antworten