C ++中的getenv返回错误的值

时间:2017-12-16 18:14:47

标签: c++ environment-variables getenv

我想用两种不同的路径编写程序。所以,我继续这样说:

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

DietmarKühl的解决方案:

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

复制字符串