This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Weird behaviour of 'printf' with unsigned char

I wrote a small program to test the behaviour of 'printf' with unsigned char. It contained just the following loop:
for (i=0; i<10; i++)
{
printf("i = %d\n", i);
}
Now when I watch the serial I/O window
it gives me the following values:
0
256
512
768
1024
1280
and so on...

I'm not worried about the value of 'i' because it seems to be OK when I set up a watch on it. Apparently its something to do with the way the char value is sent to the emulated serial port. I can
observe the following behaviour:
0 = 00000000 00000000 --> to serial port
256=00000001 00000000 --> to serial port
512=00000010 00000000 --> to serial port

now what I can't understand is why is the all zero byte being sent to the serial port first.
Please enlighten me on this.

Regards,
Vipin Mehta

Parents
  • Well, I wrote about that only this morning, and now I've just fallen over the self same problem myself!
    Doh!

    Anyway, what happens is this:
    printf sees that you've specified "%d" so it pulls 2 bytes off the stack as a signed int.
    I needn't explain the fun that ensues if you'd only put an unsigned char onto the stack in the call...

    (sorry, it may not actually use the stack as such, but the effect's much the same!)

    BTW: How do I get the percent sign '%' to work?
    It's correct when composing the post, but displays as "96" in the actual forum display.
    Does this work: '%96' ?

Reply
  • Well, I wrote about that only this morning, and now I've just fallen over the self same problem myself!
    Doh!

    Anyway, what happens is this:
    printf sees that you've specified "%d" so it pulls 2 bytes off the stack as a signed int.
    I needn't explain the fun that ensues if you'd only put an unsigned char onto the stack in the call...

    (sorry, it may not actually use the stack as such, but the effect's much the same!)

    BTW: How do I get the percent sign '%' to work?
    It's correct when composing the post, but displays as "96" in the actual forum display.
    Does this work: '%96' ?

Children