Dans mon ancien Visual Studio 6 Je trouve que l'appel itow(), qui ressemble fondamentalement ceci:INT_SIZE_LENGTH pour itow() vaut 20, pourquoi?
#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();
}
Maintenant, remarquez le define INT_SIZE_LENGTH
. Pourquoi est-ce réglé à 20?
Le pire des cas pour un int32 devrait être -4294967295
, à droite. Et ce n'est que 11 caractères, plus \ 0. (Mon propre tampon, dans l'appel de _itow, n'est que long 13. Je pensais que c'était suffisant.)
(Un int64 positif serait jusqu'à 20 caractères, un négatif jusqu'à 21. Mais c'est la méthode pour Entiers 32 bits.)
Je sens qu'il me manque quelque chose ici? Toutes les idées reçues avec reconnaissance.
(j'ai regardé le code de Visual Studio 2008, et le code a été complètement réécrite. Je suppose que le code VS6 est pas bon.)
20 est certainement * insuffisant * car 'radix' pourrait être 2. – kennytm
Au moins la documentation de VC8 indique que' radix' * "doit être compris entre 2 et 36" *. –
Eh bien, je suppose que je savais que VC6 était bogué ... – leiflundgren