Using scanf for reading an unsigned char

user1293997 picture user1293997 · Jan 3, 2013 · Viewed 37.4k times · Source

I'm trying to use this code to read values between 0 to 255 (unsigned char).

#include<stdio.h>
int main(void)
{
    unsigned char value;

    /* To read the numbers between 0 to 255 */
    printf("Please enter a number between 0 and 255 \n");
    scanf("%u",&value);
    printf("The value is %u \n",value);

    return 0;
}

I do get the following compiler warning as expected.

warning: format ‘%u’ expects type ‘unsigned int *’, but argument 2 has type ‘unsigned char *’

And this is my output for this program.

Please enter a number between 0 and 255
45
The value is 45 
Segmentation fault

I do get the segmentation fault while running this code.

What is the best way to read unsigned char values using scanf?

Answer

Joe picture Joe · Jan 3, 2013

The %u specifier expects an integer which would cause undefined behavior when reading that into a unsigned char. You will need to use the unsigned char specifier %hhu.