1

ソースコードを提供したクライアントの1人は、intをlongに、atoiをatolに変更することで、プログラムの結果が異なると述べました。しかし、私が理解している限り、Windowsのintとlongは、同じ4バイトサイズと同じ最小/最大を持っています。同じアナロジーで、私はatoiとatolが同じ出力を生成することを期待しましたが、私たちのテストでは、それらは生成します。

私が知らなかったコマンドの間に違いはありますか?

4

1 に答える 1

2

エラー以外の場合、関数は両方とも同等に定義されます

strtol(nptr, (char **)NULL, 10)

唯一の違いはatoi、戻り値をにキャストすることですint

動作は両方で定義されていないため、エラーの場合(文字列がタイプの範囲外の値を表す場合)には異なる動作が発生する可能性があります。しかし、私は驚かれることでしょう。を呼び出して実装されていないatoi場合でも、同じコードまたは非常に類似したコードで実装されている可能性があります。atolstrtol

個人的には、クライアントに正確なコードを見せてもらいたいと思います。intたぶん彼らは彼らが主張するように->longatoi->を単に置き換えたのではありませんatol。それがすべて変更された場合(ただし、テストを行ったときに想定した方法とは少し異なります)、おそらくコードにバグの症状が見つかった可能性があります。

于 2012-10-18T14:20:47.597 に答える