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 istString 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; }; #endifAber 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*)"....