教えてください。変数aにlpStringを代入(あるいはコピー)する方法を教えてください。VS2005 c++ win32です。


char *a,;
LPCTSTR lpString;

wcscpy(shmem,*lpString);と実行すると以下のエラーがでます。

エラー 1 error C2664: 'wcscpy' : 1 番目の引数を 'char *' から 'wchar_t *' に変換できません

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/10/07 22:28:55
  • 終了:2009/10/14 22:30:02

回答(1件)

id:takfjt No.1

takfjt回答回数23ベストアンサー獲得回数32009/10/07 23:48:17

ポイント60pt

LPCTSTRは、プロジェクトのプロパティによって、

const char *型か、const wchar_t *型になります。


具体的には、

[構成プロパティ]-[全般]-[文字セット]

を「Unicode文字セットを利用する」にすると

const wchar_t *型になります。

それ以外は、const char *型です。


以上を踏まえて、質問の内容を実行する手段は2つあります。


1つは、プロパティを変える。

簡単です。

デメリットは、既存の実装でunicode用の実装をしていると

不具合がでるかもしれない、ということです。


2つめは、wchar_tからcharへ変換する。

これには、WideCharToMultiByteというAPIがありますので

それを使ってください。

http://msdn.microsoft.com/ja-jp/library/cc448089.aspx

CodePageはCP_ACP、cchWideCharは-1、lpDefaultCharとlpUsedDefaultCharはNULLにしておけば

とりあえず変換できると思います。

id:mai_mai_mail

早速の回答ありがとうございます。教えていただいたとおりに行ったか自身がありませんが、以下のコードを書きましたがエラーとなりました。

char *shmem, buff[1024];

int x;

x=WideCharToMultiByte(CP_ACP,-1,lpString,sizeof(*lpString),a,1024,NULL,NULL);

if(x==0){

MessageBox(NULL, _T("失敗です"), _T("失敗"), MB_OK);

}

アドバイスいただけると助かります。

2009/10/08 00:48:04
  • id:mai_mai_mail
    すみません。返信したコメントのコードは誤りがあります。こちらで試してエラーとなりました。

    char *a, buff[1024];

    int x;

    x=WideCharToMultiByte(CP_ACP,-1,lpString,sizeof(*lpString),a,1024,NULL,NULL);

    if(x==0){

    MessageBox(NULL, _T("失敗です"), _T("失敗"), MB_OK);

    }

    アドバ
  • id:cx20
    int WideCharToMultiByte(
     UINT CodePage, // コードページ
     DWORD dwFlags, // 処理速度とマッピング方法を決定するフラグ
     LPCWSTR lpWideCharStr, // ワイド文字列のアドレス
     int cchWideChar, // ワイド文字列の文字数
     LPSTR lpMultiByteStr, // 新しい文字列を受け取るバッファのアドレス
     int cchMultiByte, // 新しい文字列を受け取るバッファのサイズ
     LPCSTR lpDefaultChar, // マップできない文字の既定値のアドレス
     LPBOOL lpUsedDefaultChar // 既定の文字を使ったときにセットするフラグのアドレス
    );

    引数をもう一度確認してみてください。
    以下にサンプルがあります。

    ■ ワイド文字列をマルチバイト文字列に変換
    http://www.mlexp.com/wiki/?%CA%B8%BB%FA%A5%B3%A1%BC%A5%C9%CA%D1%B4%B9

    参考まで。
  • id:takfjt
    > mai_mai_mailさん

    WideCharToMultiByte(CP_ACP,0,lpString,-1,a,1024,NULL,NULL);
    で、どうでしょう。

    上記コードから見ると
    WideCharToMultiByte(CP_ACP,0,lpString,-1,buff,1024,NULL,NULL);
    かもしれないです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません