我正在开发一个用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 *'
答案 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;
}