c - 意想不到的值(value)C结构

标签 c struct char int

我正在寻求一些帮助来理解为什么我会得到一个值。我有一个非常基本的菜单来选择和设置 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/

相关文章:

c - 在 C 中订购结构数组时出现问题

c++ - 文件中的字符检查始终返回 true

C缓冲区溢出

计算嵌套for循环的执行时间

c - Erlang NIF : Threads locking

c - 如何更改 C 中数组的大小?

c++如何获取具有结构类型的 vector 的大小

c - 如何将整数数组分配给特定地址?

c++ - 使用 std::cin.getline() 输入一个 char 数组,无法读取整数

c - qsort比较功能不起作用