用C ++连接两个WCHAR_T数组

时间:2013-07-05 20:13:20

标签: c++ arrays string winapi lpcwstr

处理这些疯狂的字符串和数组让我很头疼......

到目前为止,这是我的代码

wchar_t mypath[MAX_PATH];
wchar_t temppath[MAX_PATH];

GetModuleFileName(0, mypath, MAX_PATH);
GetTempPath(MAX_PATH, temppath);
CreateDirectory(???, NULL);

前两个Windows API函数使用LPWSTR变量。第三个使用LPCWSTR。有什么主要区别?在我获得TEMP目录的路径后,我想在其中创建一个名为“test”的新目录。这意味着我需要将(L“test”)追加到我的“temppath”变量中。有人可以给我一些关于如何使用这些数组的技巧。这就是让C ++变得痛苦的原因。为什么不能每个人都只选择一种数据类型的字符串。 wchar_t如何有用?这很难使用和操纵。

谢谢你们!

2 个答案:

答案 0 :(得分:5)

  

前两个Windows API函数使用LPWSTR变量。第三个使用LPCWSTR。主要区别是什么?

LPCWSTRconst的{​​{1}}版本:

  • 来自LPCWSTR

    LPWSTR
  • 来自LPWSTR

    typedef const wchar_t* LPCWSTR; 
    
  

我想在其中创建一个名为" test"的新目录。这意味着我需要将(L" test")附加到我的" temppath"变量

使用std::wostringstream

typedef wchar_t* LPWSTR, *PWSTR;

或只是std::wostringstream wos; wos << temppath << L"\\test"; std::wstring fullpath(wos.str()); (如评论中的克里斯所建议):

std::wstring

生成连接版本。然后使用std::wstring fullpath(std::wstring(temppath) + L"\\test"); 作为c_str()的参数:

CreateDirectory()

答案 1 :(得分:4)

使用PathCombine(),例如:

wchar_t temppath[MAX_PATH+1] = {0};
GetTempPath(MAX_PATH, temppath);

wchar_t mypath[MAX_PATH+8] = {0};
PathCombineW(mypath, temppath, L"test");

CreateDirectoryW(mypath, NULL);