1

エラーを生成する atoi 関数に提供できるものはありますか (プログラムがクラッシュする場合としない場合があります)。

編集: エラーは、コンパイル エラーを生成するもの、または実行中にプログラムを終了させるものとして定義されます。

4

2 に答える 2

3

コンパイルエラーを生成するもの

指定した引数がatoi()互換性のない型の場合、コンパイル時エラーが発生します。

実行中にプログラムを終了させるもの

atoi()無効なポインターconst char*を指定すると、コードの動作は未定義になります。何も保証されていませんが、ポインタがNULL読み取り不可能なメモリであるか、それを指している場合、プログラムは終了する可能性があります (これは OS とハードウェア アーキテクチャによって異なります)。

于 2012-11-07T00:59:39.187 に答える
1

質問は、「信頼できないソースからの入力をatoiに渡す前にサニタイズする必要がありますか?」という線に沿っているのではないかと思います。

ほとんどの場合、正しく記述されたatoi関数の動作が指定されています。数値以外の何かにぶつかるまで文字を数字に変換してから停止します。ただし、atoiはオーバーフローに対して脆弱であると見なされます

代わりにstrtolを使用する必要があります。そのスペックはより厳しい

もちろん、cランタイムの実装は壊れている可能性がありますが、それについてできることはあまりありません。

于 2012-11-07T01:15:27.063 に答える