なぜこの区別?私はひどい問題にぶつかりました。その中にいると仮定itoa
してstdlib.h
、最終的にのカスタムバージョンを別のプロトタイプにリンクして、itoa
いくつかのクレイジーなエラーを生成することになりました。
では、なぜitoa
標準機能ではないのですか?どうしたの?そして、なぜ標準はその双子の兄弟に対して部分的atoi
ですか?
いいえitoa
は標準化されていないため、標準に追加するには、説得力のある理由とそれを追加するための優れたインターフェイスが必要です。
私が見たほとんどのitoa
インターフェイスは、再入可能性と有効期間の問題がある静的バッファーを使用するか、呼び出し元が解放する必要がある動的バッファーを割り当てるか、インターフェイスをより良くしないバッファーをユーザーに提供するように要求しますsprintf
。
「itoa」関数は文字列を返す必要があります。文字列はファーストクラスのオブジェクトではないため、呼び出し元はバッファ+長さを渡す必要があり、関数はそれが部屋を使い果たしたかどうかを示す何らかの方法を持っている必要があります。ここまで到達するまでに、コード/機能を複製する価値がないほどsprintfに似たものを作成しました。「atoi」関数が存在するのは、完全な「scanf」呼び出しよりも複雑ではない(そして間違いなく安全である)ためです。「itoa」関数は、それだけの価値があるほどの違いはありません。