在 MessageBox 中显示一个 int 变量

6

我正在处理一个使用Visual C++ 6.0编写的旧应用程序。出于调试目的,我尝试在MessageBox中显示一个int变量。以下是我的代码,我认为这应该是一个简单的过程,但我刚学习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个回答

9

如果你使用的是C++,为什么还要使用C风格的字符串呢?

虽然Mark Ransom提供了MFC解决方案(这也是完全有效的),这里提供一个标准的C++解决方案:

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

参考文献:

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


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

可以尝试这个


GetDlgItemInt()的返回值是UINT,因此应该使用**_ultoa而不是itoa**。 - Haseeb Mir

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

CString的Formatprintf类似,可通过参数列表填充字符串。

2

MessageBox的第二个参数需要指向以NULL结尾的字符串的指针,传递一个char是行不通的。

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


1
“学习使用调试器是学习一门语言的重要组成部分。”不幸的是,问题中的代码无法编译,因此没有需要调试的内容 :( - Ivan Aksamentov - Drop
不幸的是,这被平衡了-100;-) - Bathsheba
是的,看起来有人真的不喜欢调试 =) - Ivan Aksamentov - Drop

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

这样做可以保持(大部分)与几乎所有人都已经习惯的接口相同,避免了类型不安全的CString::Format,并避免了在显示一些调试信息时到处有几行干扰。另一个明显的好处是,如果您为自己的类型重载了operator<<,那么这个重载也将起作用。

0
根据您的错误,您应该在第二个参数上声明一个const指针。 像这样,
const char * test1= new char();

或者使用

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

同时只使用"文本"也可以。


我认为目标不是显示空字符串。 - Mark Ransom
是的,他需要显示 int - Ivan Aksamentov - Drop
明白了,所以他可以使用std::to_string(Int),但他仍然需要使用正确的参数。 - Jackzawa

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接