为什么我的功能没有返回?

时间:2015-03-18 03:38:58

标签: c

我有一个名为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]);
}

然而,我的功能永远不会回来,我无法弄清楚原因。

3 个答案:

答案 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将始终评估为truedest_size != 0时)。因此,该函数将无限循环。

应该是i < dest_size

答案 2 :(得分:1)

您需要替换

for(i = 0; dest_size; i++)

for(i = 0; i < dest_size; i++)