Problem bei Schreiben in Datei



  • Hallo.

    Wir sollen ein Programm in C schreiben, was in Dateien schreiben und Dateien auslesen kann. Dabei soll der Benutzer den gewünschten Dateinamen selbst eingeben können.

    char dateiname[100];
    
                printf("\n Dateinamen eingeben: ");
                scanf("%s", &dateiname);
    
                schreiben( dateiname );
    
    [...]
    
    void schreiben (char dateiname)
    {
         FILE *datei;
         datei = fopen (*dateiname[], "r");
         if (datei != NULL)
         {
                   fprintf(datei, " Hallo Welt!\n");
                   fclose (datei);
         }
    }
    

    Was ist an dem Code falsch? Ich bekomme immer an der Stelle fopen() eine Fehlermeldung "expected primary expression before ] token".
    Ich nehme mal an, dass ich hier etwas mit den Zeigern bzw. mit Char durcheinander gebracht habe, weiß aber nicht, wie das Programm aussehen müsste, damit es ordentlich funktioniert.

    Freundliche Grüße,
    Infostudent.



  • Erstens solltest du einen char***** in der Funktion erwarten (das übergebene Array wird unterwegs zu einem Pointer konvertiert) und zweitens ist die Konstruktion, mit der du den Dateinamen an fopen übergibst, Käse:

    void schreiben (char* dateiname)
    {
      FILE *datei;
      datei = fopen (dateiname, "r");
      ...
    }
    


  • Und wenn er in die Datei schreiben will, dann nicht fopen(dateiname, "r") sondern fopen(dateiname, "w")



  • Ich bin interessiert in welcher Schulstufe man solche Bsp´s bekommt, da ich selbst nie studiert hab....

    Aber ich würde z.B. makepath aus stdlib einbauen um den Pfad für fopen festzulegen, aber ist nur ein Tip



  • Danke für eure Antworten!

    Hab jetzt aber noch ein anderes Problem, einen linker error:

    [linker error] undefined reference to `schreiben(char)'
    ld returned 1 exit status

    Woran liegt das? Ich benutze den Bloodshed Dev C++ Compiler auf einem Windowsrechner, ich hatte bisher nie Linkerfehler. Ich hab auch mal probehalber unter Paramters to pass your program -ld bzw. nur ld eingegeben, aber der linker error bleibt weiterhin bestehen. 😞

    Grüße,
    Infostudent.



  • Infostudent schrieb:

    Danke für eure Antworten!

    Hab jetzt aber noch ein anderes Problem, einen linker error:

    [linker error] undefined reference to `schreiben(char)'
    ld returned 1 exit status

    Woran liegt das?

    Das liegt daran, daß du auch die Parameterliste des Funktionsprototypen auf 'char* dateiname' ändern mußt. Andernfalls hast du zwei überladene Versionen der Funktion deklariert - und die tatsächlich verwendete wird nirgends definiert.

    (PS: Wenn du wirklich einen C++ Compiler verwendest, warum nutzt du dann nicht die Möglichkeiten von C++?)



  • Danke, jetzt klappt es.

    PS: Wenn du wirklich einen C++ Compiler verwendest, warum nutzt du dann nicht die Möglichkeiten von C++?

    Wir müssen die Programme in C schreiben. Ich hab mich auch schon beschwert und gefragt, ob wir die Programme zu den vorgegebenen Aufgaben nicht auch in C++ schreiben können (ich kenn eigentlich nur C++), aber das ist nicht zulässig (mit der Begründung: Dann könnten wir ja in Versuchung gelangen, objektorientiert zu programmieren und dies solle von vorn herein ausgeschlossen sein).

    Grüße,
    Infostudent.



  • Was ist denn das für ein Kurs?



  • Modellierung und Programmierung 2 (ein Modul für Informatiker).



  • Danke @CStoll 🙂


Anmelden zum Antworten