23

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

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

我需要设置mypathpath. 我做了一个简单的循环并连接path[index]mypath并且这有效,但我不喜欢这种方式。

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

4

5 回答 5

25

TCHAR 是一个定义为 char 或 wchar 的宏,具体取决于您将字符集定义为什么。2008 年之后的默认设置是字符集为 unicode。如果您更改字符集,则此代码有效。

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

右键单击项目设置并更改以下内容

在此处输入图像描述

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

于 2011-05-15T03:53:18.207 回答
14

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

TCHAR  infoBuf[32767];
GetWindowsDirectory(infoBuf, 32767);

然后我将它转换为可以转换为标准的 wstring std::string

wstring test(&infoBuf[0]); //convert to wstring
string test2(test.begin(), test.end()); //and convert to string.
于 2015-01-27T18:16:41.710 回答
8

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

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

于 2011-05-15T07:27:10.977 回答
5

您还可以将 from 转换_TCHAR*char*usingwcstombswcstombs_sfunction

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

于 2012-06-28T12:46:21.097 回答
1

嗨,这是一个迟到的答案,但我有一个想法。

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

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

于 2020-06-07T09:42:42.433 回答