我想用两种不同的路径编写程序。所以,我继续这样说:
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()
更改了第一个变量
答案 0 :(得分:0)
这里发生的事情是std::getenv("APPDATA")
为你提供了一个指向内存中已写入字符串的指针,这意味着这个函数返回的指针总是相同的。
因此,当你执行strcat(std::getenv("APPDATA"),"\\myprog.exe")
时,你基本上将存储的字符串与"\\myprog.exe"
连接在内存中。因此,当您再次调用std::getenv("APPDATA")
时,您将获得连接的字符串。
要解决此问题,您应该在std::getenv("APPDATA")