itoa()
是一个非常方便的将数字转换为字符串的函数。Linux似乎没有itoa()
,有没有等同的功能,或者我必须使用sprintf(str, "%d", num)
发布于 2008-10-10 19:14:38
如果你经常调用它,“只使用snprintf”的建议可能会很烦人。所以这可能是你想要的:
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); }
发布于 2008-10-10 05:39:46
正如Matt J所写的,有itoa
,但它不是标准的。如果你使用snprintf
,你的代码将会更容易移植。
发布于 2012-11-13 20:51:57
下面的函数分配足够的内存来保存给定数字的字符串表示,然后使用标准的sprintf
方法将字符串表示写入该区域。
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
分配的内存:
char *num_str = itoa(123456789L);
// ...
free(num_str);
注意:当snprintf拷贝n-1个字节时,我们必须调用snprintf(buf,len+1,"%ld",n) (不仅仅是snprintf(buf,len,"%ld",n))
https://stackoverflow.com/questions/190229
复制相似问题