2016-10-28 6 views
0

Я хочу добавить небольшие дополнительные опции в большую единицу, поэтому я не хочу обрабатывать большой объем кода.C++ Как преобразовать wchar_t * в TCHAR [] (не TCHAR *)

TCHAR szTempFileName[MAX_PATH]; 
TCHAR lpTempPathBuffer[MAX_PATH]; 
int uRetVal = 0; 
GetTempPath(MAX_PATH,   // length of the buffer 
    lpTempPathBuffer); // buffer for path 
GetTempFileName(lpTempPathBuffer, // directory for tmp files 
    TEXT("QRCode_"),  // temp file name prefix 
    0,    // create unique name 
    szTempFileName); // buffer for name 

Я хочу изменить szTempFileName к дополнительному wstring/станд :: струнного/wchar_t * Parametr.

Решение:

  1. изменение TCHAR к wchar_t

  2. wcscpy (wchar_t [], wchat_t *);

+1

Нет смысла менять 'wchat_t *' на 'TCHAR', а' TCHAR' - это единственный символ, где 'wchat_t *' может быть много. Обратите внимание, что 'TCHAR []' и 'TCHAR * 'являются взаимозаменяемыми по большей части. – NathanOliver

+0

Вы хотите сказать, что вам нужен только один символ из широкосимвольной строки? –

+0

Нет моей ошибки, я пытаюсь преобразовать wchar_t * в TCHAR [] wchar_t * w = L "somechart"; TCHAR t = .... – Jakooop

ответ

1

Как правило, нет оснований для использования TCHAR s вообще. Если вы работаете с wchar_t в любом случае, просто вызовите Unicode variants функций WinAPI непосредственно путем добавления суффикса W:

// Use wchar_t instead of TCHAR. 
wchar_t szTempFileName[MAX_PATH]; 
wchar_t lpTempPathBuffer[MAX_PATH]; 
int uRetVal = 0; 
// Call GetTempPathW directly. 
GetTempPathW(MAX_PATH, lpTempPathBuffer); 
// Use L"..." instead of TEXT("..."). 
GetTempFileNameW(lpTempPathBuffer, L"QRCode_", 0, szTempFileName); 
0

Стик с тем, что у вас есть и преобразовать в соответствующий тип строки в конце. Получение окон, чтобы играть красиво и правильно с помощью типов строк C++, вероятно, превратит ваши волосы в серый цвет.

Используйте следующую ЬурейеЕ создать строковый тип, который можно использовать в течение вашего кода вместо станд :: строка или станд :: wstring:

typedef std::basic_string<TCHAR> tstring; 

Построить вашу строку из буфера непосредственно:

tstring RealFileName(szTempFileName); 
Смежные вопросы