C:for循环中的scanf行为

nis*_*ntv 3 c for-loop

我遇到了以下代码:

int i;
for(; scanf("%s", &i);)
    printf("hello");
Run Code Online (Sandbox Code Playgroud)

根据我的理解,如果我们提供整数输入scanf将不会成功读取并因此返回0,因此循环不应该运行一次.但是,它通过接受所有类型的输入作为成功读取来无限运行.

有人会友好地解释这种行为吗?

hmj*_*mjd 9

这是一个不正确的格式说明符int:应该是"%d".

它试图将字符串读入int变量,可能会覆盖内存.如"%s"指定的那样,将读取所有输入,从而scanf()返回大于零的值.