c 中的getenv返回错误的值

getenv in C++ returns wrong values

本文关键字:错误 返回 中的 getenv      更新时间:2023-10-16

我想以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:UsersthispcAppDataRoamingmyprog.exe
C:UsersthispcAppDataRoamingmyprog.exeMicrosoftWindowsStart MenuProgramsStartupmyprog.exe

而不是:

C:UsersthispcAppDataRoamingmyprog.exe
C:UsersthispcAppDataRoamingMicrosoftWindowsStart MenuProgramsStartupmyprog.exe

DietmarKühl的解决方案:

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

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

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

因此,当您进行strcat(std::getenv("APPDATA"),"\myprog.exe")时,您基本上将存储在存储器中的字符串与"\myprog.exe"中。因此,当您第二次呼叫std::getenv("APPDATA")时,您将获得连接的字符串。

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

上复制字符串