understack
understack

Reputation: 11580

Simplest way to write output message to 'output window' in Visual Studio 2010?

I've tried OutputDebugString function and most of the time I get error like :

error C2664: 'OutputDebugStringA' : cannot convert parameter 1 from 'int' to 'LPCSTR'

Examples

Attempt 1:

//ERROR: sprintf is unsafe. Use sprintf_s instead
int x = 4;
char s[256];
sprintf(s, "There is %d numbers", x);
OutputDebugString((LPCWSTR)s);

Attempt 2:

//FAIL: outputs junk (sprintf_s doesn't understand unicode?)
int x = 4;
char s[256];
sprintf_s(s, "There is %d numbers", x);
OutputDebugString((LPCWSTR)s);

Attempt 3:

//ERROR: no instance of overloaded function "sprintf_s" matches the argument list
int x = 4;
TCHAR s[256];
sprintf_s(s, "There is %d numbers", x);
OutputDebugString((LPCWSTR)s);

Attempt 4:

//ERROR: no instance of overloaded function "sprintf_s" matches the argument list
int x = 4;
TCHAR s[256];
sprintf_s(s, L"There is %d numbers", x);
OutputDebugString((LPCWSTR)s);

Attempt 5:

//ERROR: no instance of overloaded function "swprintf" matches the argument list
int x = 4;
TCHAR s[256];
swprintf(s, "There is %d numbers", x);
OutputDebugString(s);

Attempt 6:

//ERROR: 'swprintf': function has been changed to confirm with the ISO C standard, adding an extra character count parameter
int x = 4;
TCHAR s[256];
swprintf(s, L"There is %d numbers", x);
OutputDebugString(s);

Upvotes: 22

Views: 99557

Answers (6)

Jangles
Jangles

Reputation: 520

I found this answer when searching the error message: https://stackoverflow.com/a/29800589

Basically, you just need put an "L" in front of your output string when using OutputDebugString:

OutputDebugString(L"test\n");

It worked great for me.

Edit:

For formatting strings with data, I ended up using

char buffer[100];
sprintf_s(buffer, "check it out: %s\n", "I can inject things");
OutputDebugStringA(buffer);

By no means am I an expert, I just found something that worked and moved on.

Upvotes: 7

Kingeh
Kingeh

Reputation: 39

Use:

OutputDebugStringA("Some random text");

Or:

OutputDebugString("Some random text");

Upvotes: 1

Inverse
Inverse

Reputation: 4476

The most common way I'm aware of is the TRACE macro:

http://msdn.microsoft.com/en-us/library/4wyz8787%28VS.80%29.aspx

For example:

int x = 1;
int y = 16;
float z = 32.0;
TRACE( "This is a TRACE statement\n" );

TRACE( "The value of x is %d\n", x );

TRACE( "x = %d and y = %d\n", x, y );

TRACE( "x = %d and y = %x and z = %f\n", x, y, z );

Upvotes: 11

Kirill V. Lyadvinsky
Kirill V. Lyadvinsky

Reputation: 99535

For debugging purposes you could use _RPT macros.

For instance,

_RPT1( 0, "%d\n", my_int_value );

Upvotes: 16

peter_mcc
peter_mcc

Reputation: 836

It only accepts a string as a parameter, not an integer. Try something like

sprintf(msgbuf, "My variable is %d\n", integerVariable);
OutputDebugString(msgbuf);

For more info take a look at http://www.unixwiz.net/techtips/outputdebugstring.html

Upvotes: 30

Donotalo
Donotalo

Reputation: 13025

To use OutputDebugString(), provide char * or const char * as parameter:

OutputDebugString("This is an output");

Upvotes: 0

Related Questions