Funktion nicht sicher?
-
Hallo,
ich war gerade dabei ein Programm zu schreiben, welches den Benutzernamen des Benutzers ausfindig machen soll. Ich weiß, dass es nicht bei jedem das Standart-Verzeichnis ist. Trotzdem möchte ich wissen, wie ich das mache. Die Funktion getenv(); ist nicht sicher. Hat wer zu dieser Funktion alternativen? Und warum ist diese nicht sicher?
LG#include <iostream> #include <cstdlib> #include <string> #include <fstream> int main() { std::string name = getenv("USERNAME"); std::ofstream file("C:\\Users\\" + name + "\\Desktop\\testtt.txt"); }
-
@redexception sagte in Funktion nicht sicher?:
welches den Benutzernamen des Benutzers ausfindig machen soll
Das ist abhängig vom Betriebssystem. Da du Windows zu benutzen scheinst, siehe meine Antwort von vor 3 Tagen hier: https://www.c-plusplus.net/forum/topic/352044/fstream-in-beliebigen-verzeichnis-erstellen - dort ging es sogar um das Desktop-Verzeichnis - genau wie bei dir jetzt. (also da geht es nicht um den Benutzernamen, sondern das Desktop-Verzeichnis des Benutzers)
-
Wenn du den Desktop auf Windows suchst, dann probier auch mal
SHGetFolderPath
mit CLSID_DESKTOP/FOLDERID_Desktop. vllt gibts auch ne id für den benutzer ordner.Die Environmentvariable USERNAME müsste nicht unbedingt gesetzt sein. Und könnte auch geändert sein, höchstwarscheinlich mit Absicht. -> Also nicht sicher im Sinn von "nicht sicher dass es funktioniert".
-
@redexception sagte in Funktion nicht sicher?:
Die Funktion getenv(); ist nicht sicher.
Wie kommst du zu dieser Behauptung? Warnt dein Visual Studio?
-
Da
getenv
einen Zeiger auf einen C-String zurückgibt, ist die Verwendung in Programmen mit mehreren Threads problematisch.Davon abgesehen solltest du nicht davon ausgehen dass der Pfad
C:\Users\<name>\Desktop
ist.
Nimm wie von @5cript vorgeschlagenSHGetFolderPath
oder verwende wenigstens%USERPROFILE%\Desktop
.