0
Je suis en train de convertir un long long non signé en une chaîne sans utiliser de fonctions de bibliothèque comme sprintf()
ou ltoi()
. Le problème est que lorsque je renvoie la valeur, il ne retourne pas correctement, si je n'ai pas printf()
dans ma fonction avant de le renvoyer à la fonction d'appel.Convertir long long int en chaîne sans sprintf en utilisant les fonctions
#include <stdio.h>
#include <stdlib.h>
char *myBuff;
char * loToString(unsigned long long int anInteger)
{
int flag = 0;
char str[128] = { 0 }; // large enough for an int even on 64-bit
int i = 126;
while (anInteger != 0) {
str[i--] = (anInteger % 10) + '0';
anInteger /= 10;
}
if (flag) str[i--] = '-';
myBuff = str+i+1;
return myBuff;
}
int main() {
// your code goes here
unsigned long long int d;
d= 17242913654266112;
char * buff = loToString(d);
printf("chu %s\n",buff);
printf("chu %s\n",buff);
return 0;
}
'char str [128] = {0};' Il ne peut pas être utilisé en dehors de la portée. – BLUEPIXY
En d'autres termes 'mybuff' pointe vers la mémoire qui a été détruite quand' loToString' est revenu. (le cadre de la pile de fonctions est détruit/relâché dans le pool de mémoire lorsque la fonction revient). Allouez 'mybuff' avant de passer à' loToString' ou dynamiquement dans 'loToString'. –
Remarque utilisez une variable booléenne pour les indicateurs booléens. – Olaf