C++ 中的 getenv returns 错误值

getenv in C++ returns wrong values

我想在 2 个不同的路径中编写我的程序。所以,我就是这样进行的:

std::string path1 = strcat(std::getenv("APPDATA"),"\myprog.exe") ;
std::string path2 = strcat(std::getenv("APPDATA"),"\Microsoft\Windows\Start Menu\Programs\Startup\myprog.exe") ;

当我打印时,我得到:

C:\Users\thispc\AppData\Roaming\myprog.exe
C:\Users\thispc\AppData\Roaming\myprog.exe\Microsoft\Windows\Start Menu\Programs\Startup\myprog.exe

而不是:

C:\Users\thispc\AppData\Roaming\myprog.exe
C:\Users\thispc\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\myprog.exe

Dietmar Kühl 的解决方案:

std::string path1 = std::getenv("APPDATA") + std::string("\myprog.exe");

Oliver Charlesworth 的解释: strcat() 更改第一个变量

这里发生的事情是 std::getenv("APPDATA") 为您提供了一个指向内存中某处已写入字符串的指针,这意味着此函数返回的指针将始终相同。

因此,当您执行 strcat(std::getenv("APPDATA"),"\myprog.exe") 时,您基本上是将内存中存储的字符串与 "\myprog.exe" 连接起来。因此,当您第二次调用 std::getenv("APPDATA") 时,您将获得连接后的字符串。

要解决此问题,您应该复制 std::getenv("APPDATA")

处的字符串