gpt4 book ai didi

c - fscanf/scanf/sscanf 转换规范是否禁止赋值而不是转换?

转载 作者:行者123 更新时间:2023-12-04 11:29:27 25 4
gpt4 key购买 nike

应该怎么做sscanf("x", "%*c%c", &(char){0})返回?
Apple 和 Godbolt 的库正在使用 return −1,这是他们的 EOF .然而,C 2018 7.21.6.7 3 告诉我们sscanf返回“EOF如果在第一次转换(如果有)完成之前发生输入故障。” %*c是一个禁止赋值的转换规范。它完成,然后在%c之前发生输入失败(字符串结束)完成。然后sscanf应该返回“分配的输入项数”,它为零。
标准中是否有任何文字可以告诉我们%*c算不算转换?

最佳答案

显然 C99 §7.19.6.2 第 15 点(和 C17 §7.21.6.2 第 15 点)告诉我们:

Trailing white space (including new-line characters) is left unread unless matched by adirective. The success of literal matches and suppressed assignments is not directlydeterminable other than via the %n directive.


其中“禁止赋值”定义为 %*后跟一个说明符。
因此,您在示例中看到的内容似乎符合标准:您无法推断 %*c是否匹配,除非您使用 n用于计算扫描字符数的说明符。
此外, this comment来自 user3386109注意到“返回值只与赋值次数有关”,问题中引用的 C 标准文本可能打算说“第一次赋值”而不是“第一次转换”。

关于c - fscanf/scanf/sscanf 转换规范是否禁止赋值而不是转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68656580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com