-3

我正在寻求一些帮助来理解为什么我会获得价值。我有一个非常基本的菜单可以在 KL25Z 微控制器(32 位架构)上选择和设置值。我有一个不会打印高于 255 的值的 int。我做错了什么?

信标.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 位?

任何帮助或方向将不胜感激。

谢谢!

4

1 回答 1

2

line是 2 个字符长。atoi适用于以 nul 结尾的字符串,因此任何超过 1 个字符的数字都会给您带来未定义的行为。

试着line做大一点。

于 2013-06-25T01:09:35.557 回答