プロが教える店舗&オフィスのセキュリティ対策術

以下のように入力し、ビルドすると
「error C2664: 'wcscat' : 1 番目の引数を 'LPCTSTR' から 'wchar_t *' に変換できません。」となり、うまくいきません。
ダイアログに「テストです。」と表示させたいです。一体どうしたらよいのでしょうか?ご教授ください~。
環境は、WindowsXP SP2 & Visual C++ 2008 Express Edition です。
なお、文字セットは「Unicode 文字セットを使用する」に設定してあります。

//-----------------------------------------------------------
#include <Windows.h>
#include <tchar.h>

INT WINAPI WinMain( HINSTANCE hInst,HINSTANCE,LPSTR,INT){

LPCTSTR str1 = _T("テスト");
LPCTSTR str2 = _T("です。");
_tcscat( str1, str2 );

MessageBox(NULL,str1,_T("Dialog"),MB_OK);

return 0;
}

A 回答 (2件)

LPCTSTRはつまりlong pointer const tchar string


なわけですが
UNICODE指定の場合 LPCTSTRはconst wchar_t*に置き換わります。

_tcscatは
第2引数はconstですが、第1引数はconst(不変)ではないですよね?
コンパイルエラーはそれが原因です。


#include <Windows.h>
#include <tchar.h>

INT WINAPI WinMain( HINSTANCE hInst,HINSTANCE,LPSTR,INT){

TCHAR str1[20] = _T("テスト");
LPCTSTR str2 = _T("です。");
_tcscat( str1, str2 );

MessageBox(NULL,str1,_T("Dialog"),MB_OK);

return 0;
}
    • good
    • 0
この回答へのお礼

素早いご返答ありがとうございます。
なるほど、LPCTSTRにはconstが含まれていたんですね。
通常の文字列にはTCHARを用いればいいのですね。
おかげさまで無事解決いたしました。

お礼日時:2008/07/28 20:54

> 一体どうしたらよいのでしょうか?


勉強してください。

TCHAR str[64];
LPCTSTR str1 = _T("テスト");
LPCTSTR str2 = _T("です。");
_tcscpy( str, str1);
_tcscat( str, str2 );

MessageBox(NULL,str,_T("Dialog"),MB_OK);

return 0;
    • good
    • 0
この回答へのお礼

素早いご返答ありがとうございます。
なるほど、こういう書き方もあるんですね。
大変勉強になります。

>勉強してください。
まだまだ未熟ですが、これからもがんばっていきたいと思います。

お礼日時:2008/07/28 20:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!