首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Linux中itoa函数在哪里?

在Linux中itoa函数在哪里?
EN

Stack Overflow用户
提问于 2008-10-10 05:29:51
回答 12查看 323.6K关注 0票数 157

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

EN

回答 12

Stack Overflow用户

发布于 2008-10-10 19:14:38

如果你经常调用它,“只使用snprintf”的建议可能会很烦人。所以这可能是你想要的:

代码语言:javascript
复制
const char *my_itoa_buf(char *buf, size_t len, int num)
{
  static char loc_buf[sizeof(int) * CHAR_BITS]; /* not thread safe */

  if (!buf)
  {
    buf = loc_buf;
    len = sizeof(loc_buf);
  }

  if (snprintf(buf, len, "%d", num) == -1)
    return ""; /* or whatever */

  return buf;
}

const char *my_itoa(int num)
{ return my_itoa_buf(NULL, 0, num); }
票数 11
EN

Stack Overflow用户

发布于 2008-10-10 05:39:46

正如Matt J所写的,有itoa,但它不是标准的。如果你使用snprintf,你的代码将会更容易移植。

票数 7
EN

Stack Overflow用户

发布于 2012-11-13 20:51:57

下面的函数分配足够的内存来保存给定数字的字符串表示,然后使用标准的sprintf方法将字符串表示写入该区域。

代码语言:javascript
复制
char *itoa(long n)
{
    int len = n==0 ? 1 : floor(log10l(labs(n)))+1;
    if (n<0) len++; // room for negative sign '-'

    char    *buf = calloc(sizeof(char), len+1); // +1 for null
    snprintf(buf, len+1, "%ld", n);
    return   buf;
}

当不需要时,不要忘记free分配的内存:

代码语言:javascript
复制
char *num_str = itoa(123456789L);
// ... 
free(num_str);

注意:当snprintf拷贝n-1个字节时,我们必须调用snprintf(buf,len+1,"%ld",n) (不仅仅是snprintf(buf,len,"%ld",n))

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/190229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档