Преобразование TCHAR в строку в C ++ - PullRequest
18 голосов
/ 15 мая 2011

Я пытаюсь преобразовать TCHAR в строку, как в:

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

Мне нужно установить mypath на значение path.Я сделал простой цикл и объединил path[index] в mypath, и это работает, но мне это не нравится.

Я новичок в C ++, но сделал много C #.Я видел примеры GetModuleFileName, которые переходят в "char", но это не нравится.Для этого нужен TCHAR или LPWSTR.

Ответы [ 4 ]

22 голосов
/ 15 мая 2011

TCHAR - это макрос, определяемый как char или wchar, в зависимости от того, для чего определен ваш набор символов.По умолчанию после 2008 года установлен символ Unicode.этот код работает, если вы измените свой набор символов.

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

Щелкните правой кнопкой мыши на настройках проекта и измените значение

enter image description here

, если хотите использовать TCHARв качестве набора символов Unicode используйте wstring

9 голосов
/ 27 января 2015

Когда мне действительно нужно это сделать, я использую следующее:

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.

Надеюсь, это поможет.

8 голосов
/ 15 мая 2011

Если вам нужен путь в символах, вы должны позвонить GetModuleFilenameA.Эта функция принимает LPSTR вместо LPTSTR.

Обратите внимание, что почти все функции Win32, которые принимают или возвращают строки, имеют две версии: одна заканчивается A (ANSI?), А другая заканчивается W (широкий).

5 голосов
/ 28 июня 2012

Вы также можете конвертировать из _TCHAR* в char*, используя wcstombs или wcstombs_s функцию

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

...