私の古いVisual Studio 6では、基本的に次のように見えるitow()が見つかりました。itow()のINT_SIZE_LENGTHは20です、なぜですか?
#define INT_SIZE_LENGTH 20
wchar_t* _itow(wchar_t*bif, int i, int radix)
{
char abuf[INT_SIZE_LENGTH];
itoa(abuf, i, radix);
// convert_to_wide_char();
}
今、INT_SIZE_LENGTH
の定義に注目してください。これはなぜ20に設定されていますか?
int32の最悪の場合は、-4294967295
にする必要があります。それは11文字に加えて\ 0です。 (私のバッファは、_itowの呼び出しでは、わずか13で、十分だと思っていました。)
(正のint64は最大20文字、負の最大21です。 32ビットの整数)
私はここに何か不足しているように感じますか?感謝していただきました。
(私はVisual Studio 2008のコードを見て、そこにコードが完全に書き換えられたので、VS6コードはあまり良くないと思います。)
20 'radix'は2になる可能性があるため、確かに*十分ではありません。 – kennytm
少なくともVC8のドキュメントでは、' radix' *は2〜36の範囲になければなりません*。 –
まあ、私はVC6がバグであることを知っていたと思います... – leiflundgren