我有一个名为gets_timeout的函数,其功能类似于普通的gets函数。但是,它有一个超时功能,它会在一段时间后返回。在我添加"超时"在我的代码的一部分,我已经完成了函数的其余部分,它应该在返回之前读取指定数量的字符。
void gets_timeout(uint8_t *dest, int dest_size)
{
int i;
memset(dest, '.', dest_size);
for(i = 0; dest_size; i++)
{
dest[i] = getch();
}
}
然后我将其称为:
uint8_t buffer[15];
gets_timeout(buffer, 15);
for(m = 0; m < 15; m++)
{
printf("%c", buffer[m]);
}
然而,我的功能永远不会回来,我无法弄清楚原因。
答案 0 :(得分:3)
在
for(i = 0; dest_size; i++)
循环的条件部分只检查dest_size
的值是否存在且是否为非零值。由于您发送的值将保持条件true
,因此它将进入无限循环。
所以改成
for(i = 0; i < dest_size; i++)
会在i < dest_size
失败的某个时间结束循环。
答案 1 :(得分:1)
for(i = 0; dest_size; i++)
条件dest_size
将始终评估为true
(dest_size != 0
时)。因此,该函数将无限循环。
应该是i < dest_size
。
答案 2 :(得分:1)
您需要替换
for(i = 0; dest_size; i++)
与
for(i = 0; i < dest_size; i++)