用scanf读一个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?

share | edit
 
use %c to read a byte –  TJD  Jan 3 at 20:12
4  
Actually %hhu for unsigned char. –  Joe  Jan 3 at 20:15
 
@TJD. I don't want to read a char. I would like to read values between 0 to 255. –  user1293997  Jan 3 at 20:15
 
@Joe. That worked great. Thanks a lot. –  user1293997  Jan 3 at 20:17
 
user1293997: you might want to write an answer and accept it (assuming @Joe is not interested in doing so). The only currently standing answer is quite incorrect. –  user4815162342  Jan 3 at 20:34

1 Answer

up vote 4 down vote accepted

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

share | edit
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值