0
sprintf()
またはltoi()
のようなライブラリ関数を使用せずに、符号なしlong long intを文字列に変換しようとしています。 問題は、呼び出し元の関数に返す前に関数内にprintf()
が含まれていなければ、正しく返されないということです。関数を使用してsprintfなしでlong long intを文字列に変換する
#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};'これはスコープ外では使用できません。 – BLUEPIXY
つまり、 'mybuff'は' loToString'が返されたときに破壊されたメモリを指しています。 (関数スタックフレームは、関数が返ってきたときに、メモリプールに破棄され/解放されます)。 'loToString'に渡す前に' mybuff'を割り当てるか、 'loToString'の中で動的に割り当てます。 –
注ブール値フラグにはブール変数を使用してください。 – Olaf