根据fscanfC17 7.21.6.2/8中的规范:
输入的空白字符(由指定的
isspace功能)被跳过,除非本说明书包括一个[,c或n符
如果格式字符串包含%%,则它是具有说明%符的规范.那不是[,c或者n,所以标准似乎说这里应该跳过前导空格.
我的问题是:这是正确的解释,还是标准中的缺陷?
我测试了两种不同的实现(mingw-w64与MSVCRT stdio,mingw-w64与MinGW stdio).前者没有跳过领先的空白,后者则没有.
测试代码:
#include <stdio.h>
int main(void)
{
int a, r;
// Should be 1 according to standard; would be 0 if %% does not skip whitespace
r = sscanf("x %1", "x%% %d", &a);
printf("%d\n", r);
// Should always be 1
r = sscanf("x%1", "x%% %d", &a);
printf("%d\n", r);
}
Run Code Online (Sandbox Code Playgroud)