Converting TCHAR to string in C++

2019-06-15 03:30发布

I'm trying to convert a TCHAR to a string as in:

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

I need to set mypath to that of path. I did a simple loop and concatenated path[index] to mypath and this works but I don't like this way.

I'm new to C++ but have done plenty of C#. I've seen examples of the GetModuleFileName that passes in a "char" but it doesn't like it. It needs the TCHAR or a LPWSTR.

标签: c++ tchar
4条回答
淡お忘
2楼-- · 2019-06-15 04:14

TCHAR is a macro defined as a char or wchar depending on what you have your character set defined to. The default after 2008 is have the character set to unicode. this code works if you change your character set.

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

Right click on the project settings and chage the folowing

enter image description here

if You want to use TCHAR as a Unicode character set use wstring

查看更多
ら.Afraid
3楼-- · 2019-06-15 04:14

When I really need to do it I use the following:

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.

Hope that helps.

查看更多
闹够了就滚
4楼-- · 2019-06-15 04:17

If you want the path in chars, you should call GetModuleFilenameA. That function takes LPSTR instead of LPTSTR.

Note that almost all Win32 functions that take or return strings have two version, one ending in A (ANSI?) and the other ending in W (wide).

查看更多
我想做一个坏孩纸
5楼-- · 2019-06-15 04:27

You can also convert from _TCHAR* to char* using wcstombs or wcstombs_s function

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

查看更多
登录 后发表回答