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")
处的字符串
我想在 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")