itoa()是一个将数字转换为字符串的非常方便的函数.Linux似乎没有itoa(),有没有等价的功能,或者我必须使用sprintf(str, "%d", num)

推荐答案

编辑:对不起,我应该记得这台机器显然是非标准的,出于学术目的插入了各种非标准的libc实现;-)

正如几位有帮助的 comments 者所提到的,itoa()确实是非标准的,所以最好使用sprintf(target_string,"%d",source_int)或(更好的是,因为它不受缓冲区溢出的影响)snprintf(target_string, size_of_target_string_in_bytes, "%d", source_int).我知道它不像itoa()那么简洁或酷,但至少你可以写一次,到处跑(tm);-)

这是旧的(经过编辑的)答案

您说默认gcc libc不包括itoa()是正确的,就像其他几个平台一样,因为它在技术上不是标准的一部分.更多信息请参见here.注意你必须

#include <stdlib.h>

当然,您已经知道了这一点,因为您可能在另一个平台上使用Linux之后想要在Linux上使用useitoa(),但是……代码(从上面的链接窃取)如下所示:

Example

/* 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;
}

Output:

Enter a number: 1750
decimal: 1750
hexadecimal: 6d6
binary: 11011010110

希望这有帮助!

C++相关问答推荐

错误:八进制常数中的数字9无效

librsvg rsvg_handle_get_dimensions获取像素大小与浏览器中的渲染大小没有不同

为什么信号量为空= 0,而不是阻塞?

如何避免重新分配指针数组时,我们从一开始就不知道确切的大小

使用额外的公共参数自定义printf

当我运行/调试C程序时,Malloc()似乎正在将&q;r\r...&q;赋值给一个指针,我不确定为什么?

#If指令中未定义宏?

如何在不使用其他数组或字符串的情况下交换字符串中的两个单词?

如何将字符**传递给需要常量字符指针的常量数组的函数

如何在C中打印包含扫描字符和整数的语句?

用C++从外部ELF符号读取值

使用nmake for程序比Hello World稍微复杂一些

仅从限制指针参数声明推断非混叠

循环中的静态变量与块中的变量和循环

C中的回文数字

不带Malloc的链表

从Raku nativecall调用时精度不同

如何解释数组中的*(ptr)和*(ptr+2)?

我可以使用Windows SDK';s IN6_IS_ADDR_LOOPBACK等,尽管没有文档?

将char*铸造为空**