0

我想用 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()改变第一个变量

4

1 回答 1

0

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

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

要解决此问题,您应该将字符串复制到std::getenv("APPDATA")

于 2017-12-16T18:29:55.337 回答