Bonjour,
Je dois travail sous MS-Windows et faire, entre autre, des conversions d'entiers vers des chaînes de caractères.
Pour ce faire, j'ai décidé d'utiliser la version sécurisée (et préconisée) de itoa : _itoa_s.
D'après la msdn :
Returned Value:
Zero if successful; an error code on failure.... |
(cf. http://msdn2.microsoft.com/en-us/library/0we9x30h.aspx)
Donc, avec cette fonction, je ne suis pas obligé de surdimensionner mon buffer cible et éventuellement, suivant le code de retour, je peux le redimensionner... Mais là mes doux rêves s'envolent car dès que je regarde d'un peut plus près _itoa_s qui finit par l'appel à
Code :
- static errno_t __stdcall xtox_s(
- unsigned long val,
- TCHAR *buf,
- size_t sizeInTChars,
- unsigned radix,
- int is_neg
- )
|
définie dans xtoa.c (VC8\crt\src\), le seul return retourne 0 et il y a un test assez sympa :
Code :
- /* Check for buffer overrun */
- if (length >= sizeInTChars)
- {
- buf[0] = '\0';
- _VALIDATE_RETURN_ERRCODE(length < sizeInTChars, ERANGE);
- }
|
Du coup, je me demande si c'est moi qui ne comprend rien ou bien s'il y a une erreur dans l'implémentation...
Merci de vos lumières.