Anzeige:
Ergebnis 1 bis 3 von 3

Thema: fopen()

  1. #1
    Registrierter Benutzer
    Registriert seit
    19.04.2001
    Beiträge
    159

    Question fopen()

    Hi,
    ich bin gerade dabei C zu lernen. Habe aber so meine Verständnisprobleme mit fopen(), ich hoffe ihr könnt mir das näher bringen.
    fopen wird ja so deklariert: fopen(char *dateiname, char *type)
    Der erste parameter ist also ein zeiger auf den Dateinamen.

    In meinem Buch kommen jetzt aber ein paar Beispiele die ich verwirrend finde. Vielleicht kann es mir jemand erklären.

    Im ersten Beispiel wird einfach mit:
    fopen("abc.xyz", "w");
    die Datei abc.xyz geöffnet. Hier wird doch aber einfach der Dateinamen und keine Zeiger(Adresse) übergeben?!?

    In einem weiteren Beispiel kann man den Dateinamen eingeben, hierzu wird vorher 'char datei[67]' deklariert. Danach mit fgets eingelesen und dann mit
    fopen(datei, "r");
    geöffnet. Hier wird doch aber auch wieder ein einfacher Dateiname verwendet?!?

    Dann beim nächsten Beispiel wird beim deklarieren der Variable datei gleich ein Wert zugewiesen
    char *datei = "abc.xyz";
    und danach mit
    fopen(datei, "r");
    die Datei geöffnet. Hier wird jetzt plötzlich nichtmehr der Dateinamen übergeben sonder ein Zeiger/Adresse !?!

    Im letzten Beispiel wir die Datei in einer extra Funktion geöffnet.
    Die Funktion wird so gefiniert:
    int file_exists(char *dateiname)
    und so aufgerufen:
    file_exists("abc.xyz")
    Das passt doch eigentlich auch nicht richtig zusammen, die Funktion file_exists erwartet einen Zeiger bekommt aber ein normalen char übergeben.


    Also ich finde es ziemlich verwirrend. In den ersten beiden Beispielen wird fopen einfach der Dateiname übergeben, im dritten ein zeiger auf den Dateinamen und im vierten wird der Funktion zum öffnen der Datei(welche ein zeiger erwartet) wieder einfach der Dateiname übergeben.

    Kann mir das mal einer etwas erklären?

    Danke!

    "I could have made some money developing proprietary software, and perhaps amused myself writing code. But I knew that at the end of my career, I would look back on years of building walls to divide people, and feel I had spent my life making the world a worse place."
    -- Richard M. Stallman

    Wissenskommunismus und Wissenskapitalismus
    Offene Quellen und öffentliches Wissen
    und vieles mehr: VRG's Texts , Philosophy of the GNU Project

  2. #2
    Registrierter Benutzer
    Registriert seit
    11.08.2001
    Beiträge
    64
    Hi!
    fopen wird ja so deklariert: fopen(char *dateiname, char *type)
    Der erste parameter ist also ein zeiger auf den Dateinamen.
    Nein. der erste parameter is ein zeiger auf char. in C sind strings ja einfach nur zeiger auf char.
    fopen("abc.xyz", "w");
    die Datei abc.xyz geöffnet. Hier wird doch aber einfach der Dateinamen und keine Zeiger(Adresse) übergeben?!?
    wie gesagt, strings sind nur char-arrays. wenn du nun "abc.xyz" uebergibs, kommt das einem
    Code:
    char *dateiname = "abc.xyz"
    gleich.
    strings kannst du in C folgendermaßen einen "wert" geben:
    Code:
    char *string = "ein string";
    char string[10] = "ein string";
    
    //-----------------------------------
    char *string;
    string = (char*)malloc(10*sizeof(char));
    strcpy(string,"ein string");
    //-----------------------------------
    in allen beispielen ist ja string einfach nur ein zeiger auf char, wobei die addresse von string in allen beispielen auf den ersten buchstaben des strings zeigt (also "e" )

    somit uebergibs du fopen als ersten parameter wie es die funktion erwartet einen zeiger auf char.

    -ponzellus-

  3. #3
    Registrierter Benutzer
    Registriert seit
    31.10.2001
    Beiträge
    8
    Hi,
    Der Witz an der Sache ist das "char datei[]" auch ein Zeiger ist, und zwar ein Zeiger auf das Zeichen-Array.

    Man kann sowohl schreiben

    char[] dateiname = "abc.xyz";

    als auch

    char *dateiname = "abc.xyz";

    Der Unterschied ist der das bei char[] der Zeiger konstant ist, also nicht verbogen werden kann.

    Code:
    char p1[] = "Hallo";
    char *p2 = "blub";
    
    p1 = p2; // Funktioniert nicht weil konstant
    p2 = p1; // würde funktionieren.
    [Edit]
    Mist, zu spät

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •