【发布时间】:2019-11-26 22:19:08
【问题描述】:
下面的 sscanf 函数的返回值为 1,无论 %n 说明符是否存在。然而变量 n 中的值发生了变化(在这种情况下从 0 变为 5),那么为什么函数不返回 2?
#include <stdio.h>
int main() {
int d = 0, n = 0;
char *p = "10 foo bar";
printf("%d\n", sscanf(p, " %d %n", &d, &n ) );
printf("%d %d\n", d, n);
return 0;
}
在我看来,这是设计使然,而不是此处的代码存在问题。这是因为 %n 不能失败,因为它只是计算读取的字符,因此以这种方式检查它是多余的吗?谢谢,我很想进一步了解这里发生了什么。
【问题讨论】:
-
因为没有从输入流中扫描该值。该函数返回成功扫描的输入数。
-
C18 说:“%n 指令的执行不会增加 fscanf 函数执行完成时返回的赋值计数。” 这是一个设计决策。