_itoa_s - C - Programmation
Marsh Posté le 25-09-2006 à 09:54:16
bb138 a écrit : |
Pas standard. Le plus simple est d'utiliser snprintf().
Exemple :
#include <stdio.h> |
Marsh Posté le 25-09-2006 à 10:58:33
Merci tu as absolument raison, snprintf fonctionne tout à fait comme il faut pour mon problème.
Saurais-tu par ailleurs si les fonctions dites "sécurisées" (exemple : _snprintf_s) sont juste des histoires Microsoft ou existent-elles aussi sous GNU/Linux par exemple ?
Marsh Posté le 25-09-2006 à 11:06:24
Finalement après avoir lancé ma machine virtuelle, il ne semble pas y avoir de fonction "sécurisée", donc encore une histoire de Microsoft...
Marsh Posté le 25-09-2006 à 13:46:44
bb138 a écrit : Je dois travail sous MS-Windows et faire, entre autre, des conversions d'entiers vers des chaînes de caractères. |
Mauvais choix. Le standard (C90) dispose de sprintf(). Un version plus sûr est disponible avec C99 : snprintf(). Ne pas se laisser endormir par les sirènes microsoftiennes...
Marsh Posté le 26-09-2006 à 11:04:39
bb138 a écrit : 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... |
Fonctions "sécurisées" de la msdn ???
J'ai plus confiance en "gets()" qu'en toutes les fonctions sécurisées de Micro$oft
Marsh Posté le 26-09-2006 à 18:23:16
Sve@r a écrit : Fonctions "sécurisées" de la msdn ??? |
Arf, faut pas tomber non plus dans la caricature. Depuis que Microsoft fait des développements en interne avec une véritable politique de qualité, il y a de bonnes choses. Et puis ne pas confondre le département outils et langages avec le département bureautique. Rien à voir...
Ceci-dit, ce n'est pas Microsoft tout seul d'imposer sa vision sécurisée du C (warnings à la compilation), mais plutôt de faire évoluer la norme (la bibliothèque) ou de créer son langage (ce qu'il a été fait avec C#).
Marsh Posté le 25-09-2006 à 09:32:22
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 à
définie dans xtoa.c (VC8\crt\src\), le seul return retourne 0 et il y a un test assez sympa :
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.