在C中将int转换为字符串

Shw*_*eta 35 c

我正在使用该itoa()函数转换intstring,但它给出了一个错误:

undefined reference to `itoa'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

是什么原因?还有其他方法可以执行此转换吗?

Edw*_*uck 71

使用snprintf,比它便携itoa.

itoa不是标准C的一部分,也不是标准C++的一部分 ; 但是,许多编译器和相关库都支持它.

例子 sprintf

char* buffer = ... allocate a buffer ...
int value = 4564;
sprintf(buffer, "%d", value);
Run Code Online (Sandbox Code Playgroud)

例子 snprintf

char buffer[10];
int value = 234452;
snprintf(buffer, 10, "%d", value);
Run Code Online (Sandbox Code Playgroud)

两个函数都类似fprintf,但输出被写入数组而不是流.sprintf和之间的区别snprintfsnprintf通过写入可以存储在的最大字符数来保证没有缓冲区溢出buffer.

  • SAVED ME at 2:08 am 我的编译器有问题,因为它不支持 itoa ,谢谢。 (2认同)

Mir*_*han 6

在继续之前,我必须警告你,这itoa不是ANSI函数 - 它不是标准的C函数.您应该使用sprintfint字符串转换为字符串.

itoa 有三个论点.

  • 第一个是要转换的整数.
  • 第二个是指向字符数组的指针 - 这是字符串将被存储的位置.如果你传入一个char *变量,程序可能会崩溃,所以你应该传入一个正常大小的char数组,它会正常工作.
  • 最后一个不是数组的大小,但它是你的数字的基数 - 基数10是你最有可能使用的数字.

该函数返回一个指向其第二个参数的指针 - 它存储了转换后的字符串.

itoa是一个非常有用的功能,一些编译器支持它 - 很遗憾它不是所有人都支持,不像atoi.

如果您仍想使用itoa,请在此处使用它.否则,您有另一个选项使用sprintf(只要你想要基数8,10或16输出):

char str[5];
printf("15 in binary is %s\n",  itoa(15, str, 2));
Run Code Online (Sandbox Code Playgroud)


use*_*016 5

用途snprintf-每个编译器都有标准配置。通过使用NULL, 0参数调用查询其所需的大小。最后再为空分配一个字符。

int length = snprintf( NULL, 0, "%d", x );
char* str = malloc( length + 1 );
snprintf( str, length + 1, "%d", x );
...
free(str);
Run Code Online (Sandbox Code Playgroud)