sscanf()
またはscanf
ファミリーの別の関数に、変換された値がターゲットの整数型の最大値を超える一連の数字が与えられた場合、
標準から、7.21.6.2p10((f)scanf
、ファミリー全体に適用):
…このオブジェクトに適切なタイプがない場合、または変換の結果をオブジェクトで表現できない場合、動作は未定義です。
scanf
ファミリーに対して非常に慎重になる別の理由のようです。 strtoXX
関数には、完全に定義された動作があります。入力が大きすぎる場合はLONG_MAX
などを返し、errno == ERANGE
を設定します。したがって、正確な情報が必要な場合は、入力を手動でトークン化し、これらの関数を使用して変換します。別の利点:エラー処理の改善。