ben oui, si j'écris (ou REécris) une fonction, c'est pour obtenir le mieux possible. Si sprintf me suffit, aucun besoin de fonction perso.
A quoi sert la chaine[MAX] dans ta fonction ???
void ReverseStr(char *psz)
{
char *c = psz, a;
while(*c) c++;
while(psz < --c) {a *psz; *psz++ *c; *c = a;}
}
quan on voit que le renversement se limite à "while(psz < --c)" autant écrire direct sur le buffer passé en param, sans compter qu'on s'épargne le count inutile en ce cas.
itoa() dans sa version ordinaire est ce qu'on pourrait appeler 'tout terrain' par le fait qu'il y a le param 'base' (3eme). On peut considérer que c'est utile si on fait un appel itoa de temps en temps pour un affichage mais ça devient une vraie nuisance si on a besoin de performance comme dans du reporting ou truc de ce genre qui doit convertir des milliers ou millions de nombres dans un buffer. Retourner le char* qu'on lui passe est une autre ineptie puisqu'on le connait, nous intéresserait mieux le pointeur sur fin d'écriture pour chainage direct sans reparcours de la chaine.
Je ne vois pas l'utilité de renvoyer le nombre de caractères écrits... Une chaine, ça se parcours jusqu'à trouver '\0' donc il est inutil de renvoyer le nombre de caractères écrits... De plus c'est une écriture de la fonction itoa, j'ai donc respecté le typage de cette fonction...
D'accord, merci beaucoup pour ces précisions! C'est très gentil de ta part.
J'ai corriger le bug pour itoa de 0.
Pour l'écriture de la chaine à l'envers directement j'avais prévu de le faire...
Ce sera fait le plutot possible je l'espère parsque retourner la chaine comme je l'ai fait, c'est loin d'etre optimal...
static est très simple: une variable déclarée static c'est une variable "globale" acessible que dans le fichier, la fonction, ou le bloc où tu l'as déclarée
c'est à dire qu'elle ne sera pas localisée dans la pile, et donc elle ne sera pas crée au début de la fonction et détruite à la fin de la fonction
Merci beaucoup pour ton commentaire, je vais me pencher dessus, et corriger tout ça...
Concernant le double test j'ai besoin de deux test de toute façon puisque d'après la doc que j'ai lu itoa ne gère que les entiers négatifs si la base est égal à 10... mais je vais les imbriquer, ça ,ne posera pas de problème. Pour le mot clé static peux tu me dire ce qu'il apporterait? à vrai dire c'est un mot clé que je n'utilise pas car je ne connais pas vraiment sa signification exacte...
Merci :)
à mon avis tu pourrais renvoyer un int : le nombre de caractère écrits au lieu de renvoyer un char *
et tu pourrais aussi écrire directement à l'envers dans chaine comme ça tu pourrais copier chaine dans resultat avec un memcpy
ton const char num devrait être déclaré static ?
pour mettre le signe moins tu fais deux tests un seul suffirait
tu utilises des indices sur tes pointeurs, alors que tu pourrais directement incrémenter et décrémenter les pointeurs, ça simplifirait le travail d'optimisation du compilateur
la macro MAX je la mettrais à 64 au moins ça ne coûte rien
renomme les fonctions spécialisées:
twitoa(), twultoa(), twtohex(), etc...
évitera confusion avec itoa() standard.
ça permet:
char buf[40];
itoa(n2, itoa(n1, buf));
par exemple, benef du strcat (à la con, chuuutttt).
A quoi sert la chaine[MAX] dans ta fonction ???
void ReverseStr(char *psz)
{
char *c = psz, a;
while(*c) c++;
while(psz < --c) {a *psz; *psz++ *c; *c = a;}
}
quan on voit que le renversement se limite à "while(psz < --c)" autant écrire direct sur le buffer passé en param, sans compter qu'on s'épargne le count inutile en ce cas.
me rappelle bnitoa tes remarques, BruNews (étrange, non ^^)
voir:
http://www.cppfrance.com/codes/SPEED-POUR-ULTOA-ITOA-WIN32-VCPLUSPLUS-ASM_10349.aspx