人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VS2005 VC WIN32でプログラミングしています。文字列をコピーしたいと思います。ポインタのコピーではなく、実態の文字列のコピーです。

LPCTSTR lpStringの文字列をWIDE CHARの文字列にコピーしたいときどのように宣言、コピー関数を作ればいいのでしょうか? lpStringはコピー後、消えます。また、消えた後にコピーの文字列を利用したいので実態のコピーが必要になります。

宜しくお願いします。

●質問者: mai_mai_mail
●カテゴリ:コンピュータ インターネット
✍キーワード:Char VC Win32 コピー プログラミング
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● makeworld
●35ポイント

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;
}

2 ● espresso3389
●35ポイント

まず、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で解放する必要があります。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ