の仕様でstrtol
は、入力文字列を「最初の空白」、「サブジェクト シーケンス」、および「最終文字列」に概念的に分割し、「サブジェクト シーケンス」を次のように定義しています。
入力文字列の最長の最初のサブシーケンスで、予期される形式の最初の非空白文字で始まります。入力文字列が空であるか、完全に空白文字で構成されている場合、または最初の非空白文字が記号または許容される文字または数字以外である場合、サブジェクト シーケンスには文字が含まれません。
かつて、「最長の最初のサブシーケンス」ビジネスは、失敗した一致としてスキャンし、次の未読文字としてスキャンする方法に似てscanf
いると考えていました。ただし、いくつかの議論の後、予想される形式の可能な文字列の最初の部分シーケンスである最長の初期文字列ではなく、予想される形式である最長の最初の部分シーケンスを処理することがほぼ確信しています。"0x@"
"0x"
"@"
strtol
まだ私を混乱させているのは、仕様の次の言語です。
サブジェクト シーケンスが空であるか、期待される形式を持たない場合、変換は実行されません。endptr が NULL ポインターでない場合、str の値は endptr が指すオブジェクトに格納されます。
「サブジェクト シーケンス」の正しい定義であると思われるものを受け入れる場合、期待される形式を持たない空でないサブジェクト シーケンスなどは存在せず、代わりに (冗長性と混乱を避けるために) テキストは単に読む必要があります。 :
サブジェクト シーケンスが空の場合、変換は実行されません。endptr が NULL ポインターでない場合、str の値は endptr が指すオブジェクトに格納されます。
誰かが私のためにこれらの問題を明確にすることができますか? おそらく、過去の議論や関連する欠陥レポートへのリンクが役立つでしょう。