Преобразование TCHAR в строку в С++
Я пытаюсь преобразовать TCHAR в строку, как в:
std::string mypath;
TCHAR path[MAX_PATH];
GetModuleFileName( NULL, path, MAX_PATH );
Мне нужно установить mypath
в значение path
. Я сделал простой цикл и конкатенировал path[index]
до mypath
, и это работает, но мне это не нравится.
Я новичок в С++, но сделал много С#. Я видел примеры GetModuleFileName
, который проходит в "char", но ему это не нравится. Он нуждается в TCHAR
или LPWSTR
.
Ответы
Ответ 1
TCHAR - это макрос, определяемый как char или wchar, в зависимости от того, для чего вы определили свой набор символов. Значение по умолчанию после 2008 года имеет набор символов для юникода. этот код работает, если вы измените свой набор символов.
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR* bob ="hi";
string s = bob;
}
Щелкните правой кнопкой мыши на настройках проекта и выполните следующие действия
![enter image description here]()
если вы хотите использовать TCHAR как набор символов Unicode, используйте wstring
Ответ 2
Если вам нужен путь в символах, вы должны вызвать GetModuleFilenameA
. Эта функция принимает LPSTR
вместо LPTSTR
.
Обратите внимание, что почти все функции Win32, которые берут или возвращают строки, имеют две версии, одна заканчивается на A
(ANSI?), а другая заканчивается на W
(wide).
Ответ 3
Вы также можете конвертировать из _TCHAR*
в char*
с помощью функции wcstombs
или wcstombs_s
http://msdn.microsoft.com/en-us/library/5d7tc9zw%28v=vs.80%29.aspx
Ответ 4
Когда мне нужно действительно, я использую следующее:
TCHAR infoBuf[32767]
GetWindowsDirectory(infoBuf, 32767);
//Let convert to string...
wstring test(&infoBuf[0]); //convert to wstring
string test2(test.begin(), test.end()); //and convert to string.
Надеюсь, что это поможет.