【发布时间】:2021-08-04 18:47:11
【问题描述】:
sscanf("x", "%*c%c", &(char){0}) 应该返回什么?
Apple 和 Godbolt 使用的库返回 -1,即他们的 EOF。但是,C 2018 7.21.6.7 3 告诉我们sscanf 返回“EOF 如果在第一次转换(如果有)完成之前发生输入故障。” %*c 是一个禁止赋值的转换规范。它完成,然后在%c 完成之前发生输入失败(字符串结尾)。然后sscanf 应该返回“分配的输入项的数量”,即为零。
标准中是否有任何文字告诉我们%*c 不被视为转换?
【问题讨论】:
-
IMO 转换发生在扫描值分配给
scanf的参数时。否则只是格式字符串的一部分 -
在规范中似乎是一个简单的错字:“第一次转换”应该是“第一次赋值”,因为返回值只与赋值数有关。
标签: c language-lawyer