Abend,
Ich brauche in C eine variabel ( char natürlich ), die zB als pfad "/home/user/.config" enthält. da user natürlich variabel ist, ich nicht weiss wie ich die systemvariabel bekomme, steh ich da vor einem problemchen. ich hoffe mal mir kann da schnell wer helfen
danke.
C - Umgebungsvariabel
- me
- Beiträge: 868
- Registriert: 30.10.2005 00:14:23
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: Paderborn
-
Kontaktdaten:
C - Umgebungsvariabel
Anytime if we think we were right,
we were maybe wrong.
we were maybe wrong.
- me
- Beiträge: 868
- Registriert: 30.10.2005 00:14:23
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: Paderborn
-
Kontaktdaten:
da ich gerade an der arbeit bin und es nicht nachschauen kann, kann ich die fehlermeldung vom gcc nicht nennen. aber folgende snippets funktionieren nicht:
wobei beim letzteren auch noch ein fehler beim / kommt, den ich allerdings auch nicht mit einem backslash beheben kann.
Code: Alles auswählen
char datei = getenv("HOME");
char datei = getenv(HOME");
char datei = (getenv("HOME")/.config;
Anytime if we think we were right,
we were maybe wrong.
we were maybe wrong.
hi,
die Signatur von getenv ist. Du bekommst halt ein Pointer auf einen Char zurück und net einen Char..
mfg
mauser
die Signatur von getenv ist
Code: Alles auswählen
char *getenv(const char *name)
mfg
mauser
- BeS
- Moderator
- Beiträge: 3236
- Registriert: 17.04.2002 18:30:21
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Stuttgart
-
Kontaktdaten:
Hallo,
mauser hat ja schon auf ein Problem hingewiesen.
Der zweite Versuch (char datei = getenv(HOME"); ) macht mit nur einem öffnenden Anführungszeichen hinter HOME keinen Sinn.
Das der letzter Versuch (char datei = (getenv("HOME")/.config; ) nicht funktioniert sollte eigentlich auch klar sein, du kannst ja nicht einfach in deinem Quellcode irgendwelche Strings reinschreiben (/.config) die weder ein Schlüsselwort der Programmiersprache noch sonst irgendwelche Variablen, Konstanten usw. sind.
Eine Möglichkeit wäre:
mauser hat ja schon auf ein Problem hingewiesen.
Der zweite Versuch (char datei = getenv(HOME"); ) macht mit nur einem öffnenden Anführungszeichen hinter HOME keinen Sinn.
Das der letzter Versuch (char datei = (getenv("HOME")/.config; ) nicht funktioniert sollte eigentlich auch klar sein, du kannst ja nicht einfach in deinem Quellcode irgendwelche Strings reinschreiben (/.config) die weder ein Schlüsselwort der Programmiersprache noch sonst irgendwelche Variablen, Konstanten usw. sind.
Eine Möglichkeit wäre:
Code: Alles auswählen
char *path = getenv("HOME");
char *file = "/.config";
strcat(path, file);
printf("%s\n", path);
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support
Ich spreche von Freier Software!
Ich spreche von Freier Software!
strcat überschreibt path. Ein Bufferoverflow ist vorprogrammiert.
besser:
besser:
Code: Alles auswählen
#define BUFFER_SIZE 2048
char* filename = malloc(BUFFER_SIZE *sizeof(char)); //falls sizeof(char) mal nicht 1 ist ;)
..
snprintf(filename, BUFFER_SIZE, "%s/%s", getenv("HOME"), ".config");