描述
我想将0-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;
}
g++:
有警告(warning: format ‘%u’ expects type ‘unsigned int *’, but argument 2 has type ‘unsigned char *’),运行成功。
vs2008:
run-time check failure #2:stack around variable 'value' was corrupted.
将代码中的%u改为%hhu后:
g++:
没有警告,运行成功。
vs2008:
依然是run-time check failure #2:stack around variable 'value' was corrupted.
好像vs编译并不识别输入格式中h这个符号,将%hhu等同于%u(个人猜测)。
问题:
在vs编译器中,如何将0-255的整数读入unsigned char?
参考资料:
http://www.cnblogs.com/ayanmw...
补充
@kostring
你的代码在我的vs2008上运行结果:
vs2008不支持%hh,VS2015支持%hh。
详见vs2008的msdn文档:
scanf Width Specification:https://msdn.microsoft.com/en...
scanf Type Field Characters:https://msdn.microsoft.com/en...
另,vs2008支持%hu(当然vs2015也支持),以下代码在VS2008和vs2015都没有报错。
c90不支持%hh,c99开始支持。见http://stackoverflow.com/ques...