const char und const char*



  • Hallo!

    Ich habe ursprünglich folgendes getan:

    sprintf(filename, "xxxx.dat");
    FILE* pfile = fopen(filename, "r");
    

    also per sprintf ein char erzeugt und die Datei mit dem Namen dann geöffnet.

    Nun möchte ich das erzeugen des Dateinamens aber als Funktion auslagern:

    const char GetFilename() {
        char filename[100];
        sprintf(filename, "P2_testbeam_27_05_2015/data/ch00/run_1_ch00.dat");
        return filename;
    }
    

    und später:

    FILE* pfile = fopen(GetFilename, "r");
    

    Ich bekomme folgende Compilermeldung:

    error: cannot convert ‘const char (*)()’ to ‘const char*’ for argument ‘1’ to ‘FILE* fopen(const char*, const char*)’
    

    Hat dazu jemand eine Idee?

    Ich weiß, ich bin Anfänger und (noch) etwas verloren. Vielen lieben Dank!

    Juniata

    ~Edit durch Arcoth: Tags und Formatierung~


  • Mod

    Um eine Funktion ohne Argumente aufzurufen, brauchst du auch ein leeres Klammernpaar:

    fopen(GetFilename(), "r");
    

    ohne dieses übergibst du nämlich ein lvalue auf die Funktion selbst, welches in diesem Fall in einen Zeiger auf die Funktion zerfiel ( char const(*)() ).



  • const char GetFilename() { 
        char filename[100]; 
        sprintf(filename, "P2_testbeam_27_05_2015/data/ch00/run_1_ch00.dat"); 
        return filename; 
    }
    

    1. fehlt da nen *
    und 2. nen static



  • unskilled schrieb:

    1. fehlt da nen *
    und 2. nen static

    und das sprintf ist unnötig

    const char* GetFilename() { 
        return "P2_testbeam_27_05_2015/data/ch00/run_1_ch00.dat"; 
    }
    


  • Das const char* und FILE* ist unnötig. Nimm std::string und std::fstream , wir sind hier nicht bei C. Oder du bist im falschen Forum gelandet.


Anmelden zum Antworten