如题,直接贴代码:
int main(void)
{
int i = 0;
static unsigned char input[300];
int len = 0;
unsigned char ch;
while (scanf("%1x", &ch) == 1) {
input[len++] = ch;
printf("%d ", len);
}
return 959;
}
当输入123456h的时候,正常执行,打印输出:1 2 3 4 5 6,如图:
如果把代码改一下,把第一行int注释掉,就不能正常执行了:
int main(void)
{
// int i = 0;
static unsigned char input[300];
int len = 0;
unsigned char ch;
while (scanf("%1x", &ch) == 1) {
input[len++] = ch;
printf("%d ", len);
}
return 959;
}
当输入123456h的时候,打印输出:1 1 1 1 1 1,如图:
单步调试发现,进入while循环后,执行完里面的语句,进入下一循环时,变量len的值自动被置为0。
但如果我把ch变量定义中的char改为int,又正常了!如图:
为什么会这样?还请大佬们指点一下!
再然后,我把变量ch还是改回char类型,当我把第二个变量定义语句:
static unsigned char input[300];
的static去掉,改为:
unsigned char input[300];
程序又能正常运行了,如图:
太诡异额!真是百撕不得其姐!