我想用scanf()做一个小实验,我想从用户那里读取一个小整数(〈= 255),并将其存储在char类型中。我做了:
char ch; scanf("%d",&ch);
它可以工作,但我希望满足编译器的要求,而不是收到以下警告:
warning: format specifies type 'int *' but the argument has type 'char *' [-Wformat] scanf("%d",&ch);
你知道吗?
kpbwa7wx1#
首先,要存储一个0 - 255的值,你不应该使用char,事实上,你不应该为了存储除字符和字符串以外的任何东西而使用char,这是因为该类型具有实现定义的符号:Is char signed or unsigned by default?您可以:
char
unsigned char val; scanf("%hhu", &val);
尽管使用stdint.h中的可移植类型通常是最佳做法:
stdint.h
#include <stdint.h> #include <inttypes.h> // (actually includes stdint.h internally) uint8_t val; scanf("%"SCNu8, &val);
1条答案
按热度按时间kpbwa7wx1#
首先,要存储一个0 - 255的值,你不应该使用
char
,事实上,你不应该为了存储除字符和字符串以外的任何东西而使用char
,这是因为该类型具有实现定义的符号:Is char signed or unsigned by default?您可以:
尽管使用
stdint.h
中的可移植类型通常是最佳做法: