-3

なぜ値が得られるのかを理解するための助けを探しています。KL25Z マイクロ コントローラ (32 ビット アーキテクチャ) で値を選択して設定するための非常に基本的なメニューがあります。255 を超える値を出力しない int があります。何が間違っていますか?

beacon.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 に戻っているように見えます。

どんな助けや指示も大歓迎です。

ありがとう!

4

1 に答える 1

2

line長さは 2 文字です。atoiヌルで終了する文字列で機能するため、1 文字の数字を超えると未定義の動作が発生します。

line大きくしてみる。

于 2013-06-25T01:09:35.557 に答える