is this a FBSD printf bug?

Han Hwei Woo hhwoo at argosy.ca
Sat Jun 21 05:55:03 PDT 2003


Hrrm... your question and the code seem to contradict each other.

Firstly, you are assigning hex values to the characters in your array.
Secondly, you are printing the values stored in the array as hex values by
specifying %02x.

I think you meant to ask why you are getting the preceding trail of
ffff...'s. If that's the case, it's because you are assigning values to
signed character variables and printing them as unsigned hex values. Thus,
when you assign values greater than 127 (starting with 88), you are
overriding the sign of the character. To get the output you would expect,
simply declare a as an unsigned character array.

e.g. unsigned char a[LEN_ARRAY+1];

----- Original Message ----- 
From: <abc at ai1.anchorage.mtaonline.net>
To: "freebsd-questions" <questions at freebsd.org>
Sent: Saturday, June 21, 2003 7:14 AM
Subject: is this a FBSD printf bug?


> FBSD 4.8
>
> i hope this isn't a question based on extreme
> ignorance - i haven't programmed in C in a
> long time, and i don't have another machine
> to test this on.  i can't understand why
> the output of the following code produces
> "ints" when given variables of type "char",
> so it looks like a bug to me ...
>
> #include <stdio.h>
>
////////////////////////////////////////////////////////////////////////////
///
> int                     main(int argc, char *argv[]) {
>
> #define LEN_ARRAY 16
> char a[LEN_ARRAY+1];
> int i;
>
> a[0]=0x00;
> a[1]=0x11;
> a[2]=0x22;
> a[3]=0x33;
> a[4]=0x44;
> a[5]=0x55;
> a[6]=0x66;
> a[7]=0x77;
> a[8]=0x88;
> a[9]=0x99;
> a[10]=0xaa;
> a[11]=0xbb;
> a[12]=0xcc;
> a[13]=0xdd;
> a[14]=0xee;
> a[15]=0xff;
>
>     for ( i = 0; i < LEN_ARRAY; ++i ) printf("[%02i]%02x\n", i, a[i]);
> }
>
////////////////////////////////////////////////////////////////////////////
///
> //
> // OUTPUT:
> //
> // [00]00
> // [01]11
> // [02]22
> // [03]33
> // [04]44
> // [05]55
> // [06]66
> // [07]77
> // [08]ffffff88 ???
> // [09]ffffff99 ???
> // [10]ffffffaa ???
> // [11]ffffffbb ???
> // [12]ffffffcc ???
> // [13]ffffffdd ???
> // [14]ffffffee ???
> // [15]ffffffff ???
> _______________________________________________
> freebsd-questions at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to
"freebsd-questions-unsubscribe at freebsd.org"
>



More information about the freebsd-questions mailing list