当sscanf()
或scanf
系列中的另一个函数被赋予一个数字序列,其转换值超过目标整数类型的最大值时,
答案 0 :(得分:47)
从标准来看,7.21.6.2p10((f)scanf
适用于整个家庭):
...如果此对象没有合适的类型,或者如果转换结果无法在对象中表示,则行为未定义。
看起来是对scanf
家族非常谨慎的另一个原因。 strtoXX
函数具有完全定义的行为。对于过大的输入,他们会返回LONG_MAX
等,并设置errno == ERANGE
。因此,如果您需要确切的信息,请手动标记输入并使用这些函数进行转换。另一个好处是:更好的错误处理。