user1293997 user1293997 -4 years ago 142
C Question

Using scanf for reading an unsigned char

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 Source

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.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download