none
'int' から 'LPCSTR' に型変換する方法を教えてください。 RRS feed

  • 質問

  •  

    どうも、こんにちわ。

     

    VC++の初心者です。

     

    MessageBoxを表示する際に、int型変数をメッセージ表示させようと

    したのですが、エラーが出て、うまくいきません。

    //コード

    MessageBox(NULL, suu1, _T("メッセージボックス"), MB_OK);

     

    下記のエラーが出るのですが、型変換を行う方法がわかりません。

    error C2664: 'MessageBoxA' : 2 番目の引数を 'int' から 'LPCSTR' に変換できません。

     

    (LPCSTR)suu1

    と型変換をすると、ビルドは通るのですが、メッセージボックスを表示する

    段階でエラー中断してしまいます。

     

    初歩的な質問で申し訳ないです。

    ご教授のほど、よろしくお願いします。

     

     

    ■使用環境は、

    OS:WinXP

    Microsoft Visual Studio 2005
    Version 8.0.50727.762  (SP.050727-7600)
    Microsoft .NET Framework
    Version 2.0.50727

    インストールされている Edition: Professional

    Microsoft Visual C++ 2005   77971-009-1215435-41857
    Microsoft Visual C++ 2005

    Microsoft Visual Web Developer 2005   77971-009-1215435-41857
    Microsoft Visual Web Developer 2005

    Microsoft Web Application Projects 2005   77971-009-1215435-41857
    Microsoft Web Application Projects 2005
    バージョン 8.0.50727.762

    Crystal Reports    AAC6G-J0CSA4B-U7000AN
    Crystal Reports for Visual Studio 2005


    Microsoft Visual Studio 2005 Professional Edition - 日本語 Service Pack 1 (KB926602)  
    この Service Pack は Microsoft Visual Studio 2005 Professional Edition - 日本語 用です。


     

    2007年5月9日 8:31

回答

  • MessageBox関数では文字列しか指定できません。
    ですので、int型を表示したい場合一度文字列に変換する必要があります。

    wsprintf(もしくは、tchar.hの_stprintf、マルチバイト文字セットのみでもよいならsprintf)関数を使って変換するのが
    一般的です。

    TCHAR msg[ 8 ];

    wsprintf(msg, TEXT("%d"), suu1);
    MessageBox(NULL, msg, TEXT("メッセージボックス"), MB_OK);

    wsprintf
    http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_wsprintf.asp


    それと環境の明記ですが、そこまで詳しくなくてもいいです。
    というか、それよりもどのプロジェクトなのかを明記してもらいたいです。

    記述例

    ・Windows XP Pro SP2/VS2005 Pro SP1/Win32 プロジェクト(マルチバイト文字セット)
    ・Windows Vista Business/VC2005 Express/CLR Windowsフォームアプリケーション
    2007年5月9日 8:49
  •  

    丁寧なご回答、ありがとうございます。

     

    ご教授くださった通りにコードを修正しまして、

    うまく行きました。

     

    型変換の方法がうまく行くと、すんなり事が運ぶのですが、

    型変換につまづくとニッチもサッチも行かない感じです。

     

     

    ご指摘いただいた、環境の明記について、

    了解しました。

     

    細かいご指導、恐れ入ります。

    助かりました。

    ありがとうございます。

     

    2007年5月9日 9:14

すべての返信

  • 数値 123 を 数字(文字列) "123" に変換すべし。

    sprintf とか CString::Format とか std:: ostringstream とかを使います。

     

    2007年5月9日 8:49
  • MessageBox関数では文字列しか指定できません。
    ですので、int型を表示したい場合一度文字列に変換する必要があります。

    wsprintf(もしくは、tchar.hの_stprintf、マルチバイト文字セットのみでもよいならsprintf)関数を使って変換するのが
    一般的です。

    TCHAR msg[ 8 ];

    wsprintf(msg, TEXT("%d"), suu1);
    MessageBox(NULL, msg, TEXT("メッセージボックス"), MB_OK);

    wsprintf
    http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_wsprintf.asp


    それと環境の明記ですが、そこまで詳しくなくてもいいです。
    というか、それよりもどのプロジェクトなのかを明記してもらいたいです。

    記述例

    ・Windows XP Pro SP2/VS2005 Pro SP1/Win32 プロジェクト(マルチバイト文字セット)
    ・Windows Vista Business/VC2005 Express/CLR Windowsフォームアプリケーション
    2007年5月9日 8:49
  •  

    丁寧なご回答、ありがとうございます。

     

    ご教授くださった通りにコードを修正しまして、

    うまく行きました。

     

    型変換の方法がうまく行くと、すんなり事が運ぶのですが、

    型変換につまづくとニッチもサッチも行かない感じです。

     

     

    ご指摘いただいた、環境の明記について、

    了解しました。

     

    細かいご指導、恐れ入ります。

    助かりました。

    ありがとうございます。

     

    2007年5月9日 9:14