如何在C中将整数转换为字符串?

jan*_*o-m 173 c string integer type-conversion

我试过这个例子:

/* 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;
}
Run Code Online (Sandbox Code Playgroud)

但那里的例子不起作用(它表示该功能itoa不存在).

qwe*_*rtz 278

用途sprintf():

int someInt = 368;
char str[12];
sprintf(str, "%d", someInt);
Run Code Online (Sandbox Code Playgroud)

所有可表示的数字都int将适合12-char数组而不会溢出,除非您的编译器以某种方式使用超过32位int.当使用具有更大位数的数字时,例如long对于大多数64位编译器,您需要增加数组大小 - 对于64位类型,至少需要21个字符.

  • 通常最好使用snprintf()来覆盖你不知道`str`有多大的情况.(例如,多字节字符,表示没有限制的计数器的数字等). (11认同)

bhu*_*hni 53

制作自己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;
}
Run Code Online (Sandbox Code Playgroud)

或使用标准sprintf()功能.

  • 这段代码中有一个错误:由于`i*= -1`行,它在`i = INT_MIN`时会失败. (3认同)

cni*_*tar 45

那是因为itoa不是标准功能.试试吧snprintf.

char str[LEN];
snprintf(str, LEN, "%d", 42);
Run Code Online (Sandbox Code Playgroud)

  • 什么应该"LEN"? (5认同)
  • http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/ (3认同)
  • 对于snprintf,你没有` - 1`. (3认同)
  • snprintf()更安全,因为您指定了您要输入的输入量.否则,如果您的字符串具有多字节字符,或者由于数字较大而结束的时间超过预期,则可能会溢出缓冲区并导致程序崩溃(等). (3认同)
  • @Gabe我使用`(CHAR_BIT*的sizeof(INT) - 1)/ 3 + 2`,如[CAF提到](http://stackoverflow.com/a/8257728/226266). (2认同)