用char数组连接TCHAR?

时间:2018-05-06 12:38:28

标签: c++ visual-studio

我正在尝试接收项目的当前目录。一段时间后,我找到了函数 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script src="js/three.js"></script> <script> var x = new THREE. </script> </head> <body> </body> </html> ,它似乎有效,但它只适用于wchar_T,对我来说,这会使事情变得复杂一些。

这是我的代码:

GetCurrentDirectory

正如您所看到的,我正在尝试将其他文本附加到当前工作目录的占位符,但它不起作用。如何成功获取当前目录,同时还能够在该目录中附加文件名,我该怎么办?如果可能的话,我也希望能够使用int main() { TCHAR pwd[MAX_PATH]; GetCurrentDirectory(MAX_PATH, pwd); MessageBox(NULL, pwd, pwd, 0); std::wcout << pwd + "\\filename.so" << '\n'; } ,我的意思是为什么目录甚至存储为宽字符?所有符号都有效吗?

哦,我正在使用Visual Studio :)

1 个答案:

答案 0 :(得分:1)

std::wcout << pwd + "\\filename.so" << '\n';

在使用+运算符时,您不会连接两个字符串。相反,您将两个指针添加在一起。你需要做的是放弃TCHAR和char数组。相反,请始终使用std::wstring

此外,请使用Win32调用的Wide(W)版本。

int main()
{
    wchar_t pwd[MAX_PATH];
    std::wstring finalPwd;
    GetCurrentDirectoryW(MAX_PATH, pwd);

    finalPwd.assign(pwd);

    MessageBoxW(NULL, finalPwd.c_str(), finalPwd.c_str(), 0);
    std::wcout << finalPwd + L"\\filename.so" << '\n';
}

这种方法的缺点是您需要始终在API边界将wstring转换为wchar_t,反之亦然。但除了编写一些包装函数之外,你无能为力。