Reputation: 11580
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
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
Reputation: 39
Use:
OutputDebugStringA("Some random text");
Or:
OutputDebugString("Some random text");
Upvotes: 1
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
Reputation: 99535
For debugging purposes you could use _RPT
macros.
For instance,
_RPT1( 0, "%d\n", my_int_value );
Upvotes: 16
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
Reputation: 13025
To use OutputDebugString(), provide char *
or const char *
as parameter:
OutputDebugString("This is an output");
Upvotes: 0