#c #tchar
#c #tchar
Вопрос:
Я пытаюсь преобразовать TCHAR в строку, как в:
std::string mypath;
TCHAR path[MAX_PATH];
GetModuleFileName( NULL, path, MAX_PATH );
Мне нужно установить mypath
значение path
для. Я выполнил простой цикл и объединил path[index]
в mypath
, и это работает, но мне не нравится этот способ.
Я новичок в C , но много работал с C #. Я видел примеры GetModuleFileName
, которые передаются в «char», но ему это не нравится. Для этого нужен TCHAR
или LPWSTR
.
Ответ №1:
TCHAR — это макрос, определенный как char или wchar в зависимости от того, для чего определен ваш набор символов. После 2008 года по умолчанию используется набор символов в Unicode. этот код работает, если вы измените свой набор символов.
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR* bob ="hi";
string s = bob;
}
Щелкните правой кнопкой мыши на настройках проекта и измените следующие
если вы хотите использовать TCHAR в качестве набора символов Unicode, используйте wstring
Комментарии:
1. А еще лучше, определите typedef в
TCHAR
:typedef std::basic_string<TCHAR> tstring;
и используйтеtstring
везде.2. Спасибо за помощь. Установка указанного выше символа сработала. Теперь я могу использовать тип char в методе GetModuleFileName.
3. Это выдает ошибку
a value of type "const char *" cannot be used to initialize an entity of type "TCHAR *"
4. @ThisClark определяется как TCHAR. Это работает на VS2013 и 2015. TCHAR определен в tchar.h если это не включено, это, конечно, не сработает.
5. Ты ЕДИНСТВЕННЫЙ, НЕПОВТОРИМЫЙ. Кто действительно указал на реальную проблему TCHAR. ВАУ, это был отличный ответ.
Ответ №2:
Когда мне действительно нужно это сделать, я использую следующее:
TCHAR infoBuf[32767];
GetWindowsDirectory(infoBuf, 32767);
И затем я конвертирую его в wstring, который может быть преобразован в стандартный std::string
:
wstring test(amp;infoBuf[0]); //convert to wstring
string test2(test.begin(), test.end()); //and convert to string.
Ответ №3:
Если вам нужен путь в символах, вы должны вызвать GetModuleFilenameA
. Эта функция принимает LPSTR
вместо LPTSTR
.
Обратите внимание, что почти все функции Win32, которые принимают или возвращают строки, имеют две версии, одна из которых заканчивается на A
(ANSI?), а другая заканчивается на W
(wide).
Ответ №4:
Вы также можете преобразовать из _TCHAR*
в char*
с помощью функции wcstombs
or wcstombs_s
http://msdn.microsoft.com/en-us/library/5d7tc9zw(v=vs.80).aspx
Ответ №5:
Привет, это поздний ответ, но у меня есть идея.
{wstring test = User;
std::wcout << test << std::endl;
string test2(test.begin(), test.end());
std::cout << test2 << std::endl;}
Пользователь в этом примере является именем пользователя в качестве TCHAR
.
Теперь я могу использовать это имя как string
или wstring
.
Это самый простой способ преобразовать TCHAR
в string
.