user3076025
user3076025

Reputation: 61

Display an int variable in a MessageBox

I am working on an old app written in Visual C++ 6.0. I am trying to display an int variable in a MessageBox for debugging reasons. Here is my code, I thought this would be a simple process, but I am just learning C++. The two lines that are commented I have tried as well with similar errors. Below is the error I am getting.

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

error C2664: 'MessageBoxA' : cannot convert parameter 2 from 'char' to 'const char *'

Upvotes: 6

Views: 36815

Answers (7)

HeavenHM
HeavenHM

Reputation: 992

Here is the pure C solution using sprintf method to store all input in buffer and passing that buffer to 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;
}

Upvotes: 0

Oleh
Oleh

Reputation: 674

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

Can try this

Upvotes: 4

Jerry Coffin
Jerry Coffin

Reputation: 490583

For what it's worth, I prefer to use a manipulator for this:

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

This maintains (mostly) the same interface nearly everybody's already accustomed to with iostreams, avoids the type-unsafe CString::Format, and avoids having several lines of distraction everywhere you're going to display a little information for debugging. The other obvious good point is that if you've overloaded operator<< for your own type, that overload will work with this as well.

Upvotes: 1

Drop
Drop

Reputation: 13003

Why bother with C-style strings if you tagged C++?

Although Mark Ransom provided MFC solution (which is perfectly valid), here is a Standard C++ one:

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

References:

Use boost::format for more sophisticated formatting.

Upvotes: 9

Jackzawa
Jackzawa

Reputation: 32

Acording to your error, you should declare a const pointer on the second parameter. Like this,

const char * test1= new char();

or use

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

Also using just "Text" will work.

Upvotes: 0

Bathsheba
Bathsheba

Reputation: 234855

The second parameter of MessageBox needs to be a pointer to a string of chars, terminated with NULL. Passing a char will not work.

But, learning to use a debugger is an integral part to learning a language. Why not build a debug build and set a breakpoint on char test1 = index1; instead? You do that by pressing F9 when the cursor is on that line.

Upvotes: 2

Mark Ransom
Mark Ransom

Reputation: 308520

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

CString's Format works just like printf to populate the string with the parameter list.

Upvotes: 4

Related Questions