【问题标题】:unexpected value C structure [closed]意外的价值C结构[关闭]
【发布时间】:2013-06-21 15:37:52
【问题描述】:

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

信标.h

typedef struct _payload_t {

int t1_range;

} PAYLOAD_T;

beacon.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 位?

任何帮助或指导将不胜感激。

谢谢!

【问题讨论】:

  • 是您的代码的准确表示吗?一个BUFFSIZE 有两个F。
  • 同意;请发布真实代码。
  • 最接近typdef 的关键字是typedef。此外,您的 line 是一个 两个 元素数组 char (无论 BUFFSIZEBUFSIZE 可能是什么)。
  • 你声明 line 为 2 字符数组并输入 3 位数字?
  • 百万美元问题:你在读一个简单的数字,为什么不能用一个愚蠢的scanf("%d", &(payload.t1_range));

标签: c struct char int


【解决方案1】:

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

尝试让line 更大。

【讨论】:

  • 感谢 John 提供的有用建议并忽略了几个错别字。似乎其他一些人度过了艰难的一天,或者正在尝试用煤炭制造钻石。再次感谢。
  • 解决了这个问题 - 因为我的最大值是 2 个字节,所以我将 line 增加到“char line[3]”,然后执行“memset(line, 0, sizeof(line));”将这些位清零,这样我就不必担心 atoi 没有达到空值。希望这对将来的某人有所帮助。
  • @txcotrader line[3] 仍然无法处理值 256 - 您已经使用了所有字符,没有空间用于 nul 终止符。
猜你喜欢
  • 2017-03-03
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
相关资源
最近更新 更多