В моей старой Visual Studio 6 я обнаружил, что вызов itow () выглядит примерно так:
#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 не очень хорош.)