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 vorgeschlagen SHGetFolderPath oder verwende wenigstens %USERPROFILE%\Desktop.


Log in to reply