【发布时间】:2021-08-05 16:59:08
【问题描述】:
根据 C 标准,转换说明符 % 定义为:
% 匹配单个 % 字符;不会发生转换或分配。这 完整的转换规范应为 %%。
但是这段代码:
int main(int argc, char* argv[])
{
int n;
printf("%d\n", sscanf(" %123", "%% %d", &n));
return 0;
}
使用 gcc-11.1.0 编译得到输出 1,因此 %% 显然与字符串的 " %" 匹配。
这似乎违反了“匹配单个 % 字符”,因为它还接受了 % 字符前面的空格。
问题:根据标准接受空格作为%% 指令的一部分是否正确?
【问题讨论】:
-
en.cppreference.com/w/c/io/fscanf: "除 [、c 和 n 之外的所有转换说明符都会消耗并丢弃所有前导空白字符"
-
@Mat 谢谢...这是我错过的标准部分
标签: c gcc language-lawyer