GETENV String - Anfägnerproblem



  • Hallo,

    ich bin C++-Umsteieger/Anfänger und habe eine/zwei Frage:

    Mein eigentliches Anliegen besteht darin einen Wert aus einer Umgebungsvariable mit GETENV auszulesen. Ich habe mir die Definition angesehen und folgendes geschrieben:

    char *retval;
    string MeineString;
    retval = GETENV("PFAD");
    
    printf("Dir: %s", retval)
    

    Das ist, wie ich vermute, ein Misch-Masch aus C/C++.... (printf).

    Mein eigentliches Problem besteht darin, den Wert aus retval nach MeinString zu kopieren. Wie geht das?

    Ich möchte die GETENV-Abfrage in eine Funktion auslagern, da ich diesen Aufruf ähnlich mehrfach ausführen will. Die Funktion soll mit anderen Worten 5 Strings einlesen. Diese würde ich dann gerne mit Call-By-Refernce übergeben (in einer Struktur)!
    Es würde mir sehr helfen ein Beispiel für die Übergabe-Systematik zu sehen (Call-By-Reference / Pointer etc.).

    Vielen Dank



  • zu deinem ersten problem

    entweder über den konstruktor

    string MeinString(GETENV("PFAD"));
    

    oder über einen anderen string

    char *retval;
    string MeineString;
    retval = GETENV("PFAD");
    MeineString = String(retval);
    

    zum zweiten problem

    hoffendlich habe ich dich so richtig verstanden

    struct byRef
    {
        String strings[5];
    };
    void func(byRef &ref)
    {
        // ...
        ref.strings[2] = String(GETENV("PFAD"));
    }
    int main()
    {
        byRef DeineStruktur;
        func(DeineStruktur); // hier wird die referenz übergeben
        printf(DeineStruktur.strings[2].c_str());
    }
    oder mit zeigern
    
    // struktur bleibt so
    void func(byRef *ref)
    {
        // ...
        ref->strings[2] = String(GETENV("PFAD"));
    }
    int main()
    {
        byRef MitZeiger;
        func(&MitZeiger); // hier wird die addresse übergeben
        printf(MitZeiger.strings[2].c_str());
    }
    

    mit einem array wäre das aber einfacher, da ein array automatisch
    call by ref ist

    String strings[5];
    void func(String auch_by_ref[])
    {
    }
    int main()
    {
        func(strings);
    }
    

    mfg helferlein



  • Hallo,

    vielen Dank. Das schaut logisch aus.
    Noch eine Nachfrage:

    Die Struktur möchte ich gerne auslagern in eine header-datei.

    #ifndef APP_H
    #define APP_H
    
    #include <string>
    
    struct DirList {
     string appName;
     string filename;
     string inputdir;
     string outputdir; 
    };
    
    #endif
    

    Aber wenn ich diese Defintition in meine app.h eintrage und diese kompiliere, meckert der Compiler immer, dass

    1. string bezeichnet keinen Typ.

    Ich verstehe die Meldung insofern nicht, da ich doch die string-Bib eingebunden habe....



  • hast du schon mit std::string versucht?

    string befindet sich nämlich im Namespace std



  • Könntest Du das bitte konkretisieren (ein kleines Beispiel).

    Ich bin Fortran gewöhnt und habe noch keine klare Vorstellung, wo globale Variablen am sinnvollsten Abzulegen sind. Bzw. wie ich sie den geeigneten Modulen / Funktionen zugänglich mache.



  • #ifndef APP_H 
    #define APP_H 
    
    #include <string> 
    
    struct DirList { 
     std::string appName; 
     std::string filename; 
     std::string inputdir; 
     std::string outputdir; 
    }; 
    
    #endif
    


  • Ich bitte um Entschuldigen für die vielen Fragen.
    Ich erhalte nun die Fehlermeldung:

    "GETENV wurde in seinem Gültigkeitsbereich nicht definiert."

    #ifndef APP_H
    #define APP_H
    
    #include <string>
    
    struct filedef {
     std::string appDir;
    };
    #endif
    
    # ----------------------------------- 
    
    #include "app.h"
    
    int readdat(filedef dirlist) {
     dirlist.appDir(GETENV("PF_APP_DIR"));
    }
    

    Wie kann man den Gültigkeitsbereich allgemein feststellen, wann man ihn nicht kennt....?



  • Ok,

    ein wenig kann ich das Problem selbst klären.

    C/C++ ist "CASE-SENSETIVE"...doofer Fehler!

    Aber das Problem bleibt bestehen, dass ich nicht in das struct-Element appDir einen Wert kopieren kann:
    "Keine Übereinstimmung für Aufruf von (std::string) (char*)"....


Anmelden zum Antworten