ソースコードを提供したクライアントの1人は、intをlongに、atoiをatolに変更することで、プログラムの結果が異なると述べました。しかし、私が理解している限り、Windowsのintとlongは、同じ4バイトサイズと同じ最小/最大を持っています。同じアナロジーで、私はatoiとatolが同じ出力を生成することを期待しましたが、私たちのテストでは、それらは生成します。
私が知らなかったコマンドの間に違いはありますか?
ソースコードを提供したクライアントの1人は、intをlongに、atoiをatolに変更することで、プログラムの結果が異なると述べました。しかし、私が理解している限り、Windowsのintとlongは、同じ4バイトサイズと同じ最小/最大を持っています。同じアナロジーで、私はatoiとatolが同じ出力を生成することを期待しましたが、私たちのテストでは、それらは生成します。
私が知らなかったコマンドの間に違いはありますか?
エラー以外の場合、関数は両方とも同等に定義されます
strtol(nptr, (char **)NULL, 10)
唯一の違いはatoi
、戻り値をにキャストすることですint
。
動作は両方で定義されていないため、エラーの場合(文字列がタイプの範囲外の値を表す場合)には異なる動作が発生する可能性があります。しかし、私は驚かれることでしょう。を呼び出して実装されていないatoi
場合でも、同じコードまたは非常に類似したコードで実装されている可能性があります。atol
strtol
個人的には、クライアントに正確なコードを見せてもらいたいと思います。int
たぶん彼らは彼らが主張するように->long
とatoi
->を単に置き換えたのではありませんatol
。それがすべて変更された場合(ただし、テストを行ったときに想定した方法とは少し異なります)、おそらくコードにバグの症状が見つかった可能性があります。