LPCTSTR lpStringの文字列をWIDE CHARの文字列にコピーしたいときどのように宣言、コピー関数を作ればいいのでしょうか? lpStringはコピー後、消えます。また、消えた後にコピーの文字列を利用したいので実態のコピーが必要になります。
宜しくお願いします。
TCHAR又はWCHARの配列を宣言して、コピーすれば良いと思います。
int _tmain(int argc, _TCHAR* argv[]) { LPCTSTR lpString = L"something"; TCHAR tbuff[512]; _tcscpy_s(tbuff, _countof(tbuff), lpString); MessageBox(NULL, tbuff, L"tbuff", MB_OK); WCHAR wbuff[512]; wcscpy_s(wbuff, _countof(wbuff), lpString); MessageBox(NULL, wbuff, L"wbuff", MB_OK); return 0; }
まず、LPTSTR/LPCTSTRは、UNICODEマクロによって、ANSI(いわゆるShift_JIS)/UNICODEが変わることに注意すべきです。
確実にANSIである場合には、LPSTR/LPCSTRを利用します。逆に確実にUNICODEである場合には、LPWSTR/LPCWSTRを使います。
従って、全体的には次のようになるかと(エラー処理等、省略しています)。
LPWSTR copyToWString(LPCTSTR input) #ifdef UNICODE return _wcsdup(input); #else int size = MultiByteToWideChar(CP_ACP, 0, input, -1, NULL, 0); LPWSTR p = malloc(size * sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, 0, input, -1, p, size); return p; #endif }
また、この例では、内部で、メモリ確保のためにmalloc/_wcsdupを使っているので、返された文字列が必要なくなったら、freeで解放する必要があります。
コメント(2件)
http://www.usefullcode.net/2006/12/windowstchar.html
あるいは、MFCが利用できるならば、CStringで管理してしまうとか。