我正在寻求一些帮助来理解为什么我会得到一个值。我有一个非常基本的菜单来选择和设置 KL25Z 微 Controller (32 位架构)上的值。我有一个 int,它不会打印高于 255 的值。我做错了什么?
信标.h
typedef struct _payload_t {
int t1_range;
} PAYLOAD_T;
信标.c
#define BUFFSIZE 100
PAYLOAD_T payload;
int main (int argc, char *argv[])
{
char line[2];
int ret, select;
// print menu
print_menu();
// get menu input
ret = readline(line, BUFFSIZE, stdin, stdout);
select = atoi(line);
switch(select)
{
case 1:
uprintf(" Target 1 Starting Range: ");
ret = readline(line, BUFFSIZE, stdin, stdout); //--> 257
payload.t1_range = atoi(line);
printf(" Selection = %s\r\n", line); //--> 257
printf("(%d)\r\n",payload.t1_range); //--> 1
break;
... rest of case
}
return 0;
} //end main
一切正常,直到输入超过 255 的值,然后显示的值似乎恢复为 1。如果 payload.t1_range 是 int (16 位),为什么它的行为像 8 位?
任何帮助或指导将不胜感激。
谢谢!
最佳答案
line
长度为 2 个字符。 atoi
适用于以 nul 结尾的字符串,因此任何超过 1 个字符的数字都会给您带来未定义的行为。
尝试增大line
。
关于c - 意想不到的值(value)C结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17287189/