在MessageBox中显示一个int变量

时间:2013-12-06 21:15:08

标签: c++ winapi

我正在开发一个用Visual C ++ 6.0编写的旧应用程序。我出于调试原因试图在int中显示MessageBox变量。这是我的代码,我认为这将是一个简单的过程,但我只是在学习C ++。评论的两行我也尝试过类似的错误。以下是我得到的错误。

int index1 = 1;
char test1 = index1;
// char var1[] = index1;
// char *varGo1 = index1;
MessageBox(NULL, test1, "testx", MB_OK);
  

错误C2664:'MessageBoxA':无法将参数2从'char'转换为'const char *'

7 个答案:

答案 0 :(得分:8)

如果你标记了C ++,为什么要烦扰C风格的字符串呢?

虽然Mark Ransom提供了MFC solution(完全有效),但这里有一个标准C ++版本:

int index1 = 1;
std::string test1 = std::to_string(index1);
MessageBoxA(NULL, test1.c_str(), "testx", MB_OK);

参考文献:

使用boost::format进行更复杂的格式化。

答案 1 :(得分:3)

CString str1;
str1.Format(_T("%d"), index1);
MessageBox(NULL, str1, "testx", MB_OK);

CString的Format就像printf一样,用参数列表填充字符串。

答案 2 :(得分:2)

MessageBox的第二个参数需要是指向char字符串的指针,以NULL结尾。传递char将无效。

但是,学习使用调试器是学习语言不可或缺的一部分。为什么不在char test1 = index1;上构建调试版本并设置断点呢?当光标在该行上时按F9即可。

答案 3 :(得分:2)

int index1 = 1;
char buf[10];
itoa(index1,buf,10);
MessageBox(NULL,buf,"Caption",MB_OK);

可以试试这个

答案 4 :(得分:1)

对于它的价值,我更喜欢使用操纵器:

#include <sstream>
#include <iostream>
#include <windows.h>

using std::ostringstream;
using std::ostream;

ostream &msg_box(ostream &s) {
    ostringstream &os = dynamic_cast<ostringstream &>(s);

    MessageBox(NULL, os.str().c_str(), "testx", MB_OK);
    return s;
}

int main() { 
    ostringstream msg;
    msg << "The number is: " << 10 << msg_box;
    return 0;
}

这保持了(大部分)几乎每个人已经习惯使用iostream s的相同界面,避免了类型不安全的CString::Format,并避免在你要显示的任何地方有几行注意力分散调试的信息很少。另一个明显的好处是,如果你为自己的类型重载了operator<<,那么这个重载也适用于此。

答案 5 :(得分:0)

根据您的错误,您应该在第二个参数上声明一个const指针。 像这样,

const char * test1= new char();

或使用

std::string test1= "";
MessageBox(NULL, test1.c_str(), "testx", MB_OK);

同样只使用“文字”也可以。

答案 6 :(得分:0)

以下是纯 C 解决方案,使用 sprintf 方法将所有输入存储在缓冲区中并将该缓冲区传递给 MessageBox

#include <stdio.h>
#include <windows.h>

int main(void)
{
    int intVal = 50;
    float fltVal = 5.5;
    char *str = "Test String";
    char buf[1024] = {'\0'};//buffer to store formatted input.

    //convert formatted input into buffer.
    sprintf(buf,"Int value : %d\nFloat value : %f\nString : %s\n",intVal,fltVal,str);

    //display whole buffer.
    MessageBox(NULL,buf,"INFO",MB_ICONINFORMATION);

    return 0;
}