Ich möchte mein Programm in 2 verschiedenen Pfaden schreiben. Also ging ich wie folgt aus:getenv in C++ gibt falsche Werte zurück
std::string path1 = strcat(std::getenv("APPDATA"),"\\myprog.exe") ;
std::string path2 = strcat(std::getenv("APPDATA"),"\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\myprog.exe") ;
Wenn ich drucken, erhalte ich:
C:\Users\thispc\AppData\Roaming\myprog.exe
C:\Users\thispc\AppData\Roaming\myprog.exe\Microsoft\Windows\Start Menu\Programs\Startup\myprog.exe
statt:
C:\Users\thispc\AppData\Roaming\myprog.exe
C:\Users\thispc\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\myprog.exe
Lösung von Dietmar Kühl:
std::string path1 = std::getenv("APPDATA") + std::string("\\myprog.exe");
Erklärung von Oliver Charlesworth: strcat()
ändert die erste Variable
Sie deutlich das Ergebnis des ersten Anrufs ändern, um 'std :: getenv()' (was, glaube ich, eigentlich illegal ist) kopieren soll. Solltest du etwas wie 'std :: string path1 = std :: getenv (" APPDATA ") + std :: string (" \\ myprog.exe ") schreiben?' '? –
'strcat' modifiziert den String, auf den das erste Argument zeigt. Das ist im Allgemeinen legal, aber nicht in diesem speziellen Fall - Sie wissen nicht, wie viel Speicher dafür reserviert wurde. –