web-dev-qa-db-ja.com

Cで整数を文字列に変換するにはどうすればいいですか?

私はこの例を試してみました:

/* itoa example */
#include <stdio.h>
#include <stdlib.h>

int main ()
{
    int i;
    char buffer [33];
    printf ("Enter a number: ");
    scanf ("%d",&i);
    itoa (i,buffer,10);
    printf ("decimal: %s\n",buffer);
    itoa (i,buffer,16);
    printf ("hexadecimal: %s\n",buffer);
    itoa (i,buffer,2);
    printf ("binary: %s\n",buffer);
    return 0;
}

しかし、そこの例はうまくいきません(関数itoaが存在しないと言っています)。

170
janko-m

sprintf() :を使用してください。

int someInt = 368;
char str[12];
sprintf(str, "%d", someInt);

コンパイラがどうにかしてintに32ビット以上を使用していない限り、intで表現できるすべての数は、オーバーフローなしで12文字の配列に収まります。より大きなビットサイズの数を使うとき、例えばほとんどの64ビットコンパイラではlongを使用するため、配列サイズを大きくする必要があります(64ビットタイプでは少なくとも21文字)。

263
qwertz

あなた自身のitoaを作るのも簡単です、これを試してください:

char* itoa(int i, char b[]){
    char const digit[] = "0123456789";
    char* p = b;
    if(i<0){
        *p++ = '-';
        i *= -1;
    }
    int shifter = i;
    do{ //Move to where representation ends
        ++p;
        shifter = shifter/10;
    }while(shifter);
    *p = '\0';
    do{ //Move back, inserting digits as u go
        *--p = digit[i%10];
        i = i/10;
    }while(i);
    return b;
}

または標準のsprintf()関数を使用してください。

50
bhuwansahni

それはitoaが標準関数ではないからです。代わりにsnprintfを試してください。

char str[LEN];
snprintf(str, LEN, "%d", 42);
42
cnicutar