在C ++中将TCHAR转换为字符串

时间:2011-05-15 03:34:13

标签: c++ tchar

我正在尝试将TCHAR转换为字符串,如下所示:

std::string mypath;
TCHAR path[MAX_PATH];
GetModuleFileName( NULL, path, MAX_PATH );

我需要将mypath设置为path的{​​{1}}。我做了一个简单的循环并将path[index]连接到mypath,这样可行,但我不喜欢这种方式。

我是C ++的新手,但已经做了很多C#。我已经看到GetModuleFileName传递“char”的例子,但它不喜欢它。它需要TCHARLPWSTR

5 个答案:

答案 0 :(得分:21)

TCHAR是一个定义为char或wchar的宏,具体取决于您定义的字符集。 2008之后的默认值是将字符设置为unicode。如果您更改字符集,此代码将起作用。

int _tmain(int argc, _TCHAR* argv[])
{
    TCHAR* bob ="hi";
    string s = bob;    
}

右键单击项目设置并查看以下内容

enter image description here

如果您想将TCHAR用作Unicode字符集,请使用wstring

答案 1 :(得分:8)

如果你想要chars中的路径,你应该调用GetModuleFilenameA。该函数需要LPSTR而不是LPTSTR

请注意,几乎所有采用或返回字符串的Win32函数都有两个版本,一个以A(ANSI?)结尾,另一个以W(宽)结尾。

答案 2 :(得分:8)

当我真的需要这样做时,我使用以下内容:

TCHAR  infoBuf[32767]
GetWindowsDirectory(infoBuf, 32767); 
//Let's convert to string...
wstring test(&infoBuf[0]); //convert to wstring
string test2(test.begin(), test.end()); //and convert to string.

希望有所帮助。

答案 3 :(得分:5)

您还可以使用_TCHAR*char*功能将wcstombs转换为wcstombs_s

http://msdn.microsoft.com/en-us/library/5d7tc9zw%28v=vs.80%29.aspx

答案 4 :(得分:1)

嗨,这是一个很晚的答案,但我有个主意。

{wstring test = User;
 std::wcout << test << std::endl;
 string test2(test.begin(), test.end());
 std::cout << test2 << std::endl;}

在此示例中,用户名为TCHAR。 现在,我可以将名称用作stringwstring。 这是将TCHAR转换为string的最简单方法。