如何使用C语言将整数转换为字符数组

28

我想要在C语言中将一个整数转换为字符数组。

输入:

int num = 221234;

结果等同于:

char arr[6];
arr[0] = '2';
arr[1] = '2';
arr[2] = '1';
arr[3] = '2';
arr[4] = '3';
arr[5] = '4';

我该怎么做?


3
建议在发问前先使用谷歌搜索。 - Reno
1
man sprintf - Paul R
5个回答

26
'sprintf' 可以正常工作,如果您的第一个参数是指向字符的指针(指向字符的指针在 'c' 中是一个数组),您必须确保有足够的空间容纳所有数字和一个终止符 '\0'。 例如,如果整数使用32位,则最多有10个十进制数字。 因此,您的代码应该像这样:
int i;
char s[11]; 
...
sprintf(s,"%ld", i);

25

利用log10函数确定数字的位数,并按以下方式执行:

char * toArray(int number)
{
    int n = log10(number) + 1;
    int i;
    char *numberArray = calloc(n, sizeof(char));
    for (i = n-1; i >= 0; --i, number /= 10)
    {
        numberArray[i] = (number % 10) + '0';
    }
    return numberArray;
}

或者另一种选择是sprintf(yourCharArray,"%ld", intNumber);


那么,难道没有更省时的解决方案吗?因为我必须设计一个能在不到1秒内运行的算法。 - Master Yoda
我认为在log10(number)周围加上floor()是必要的,以避免舍入误差...但我不确定...无论如何+1个好答案。 - user4227915
7
这不是返回一个反向的数字吗? - roottraveller
2
你的方法有4个问题:1. 你没有为NULL字符分配足够的空间;2. 输出的字符不是ASCII,而是INT;3. 如果输入0(零),它将返回空值;4. 输出的字符串是反转的。 - Binar Web
将for循环改为for ( i = n-1; i >= 0; --i, number /= 10 ),以便输出不被反转,并将循环中的行改为numberArray[i] = (number % 10)+'0';以将int转换为char。 - Juan Pablo

3

使用sprintf是一种简单的方法。我知道其他人建议使用itoa,但是a)它不是标准库的一部分,b)sprintf提供了itoa没有的格式选项。


1
使用 itoa,如此处所示。
char buf[5];
// Convert 123 to string [buf]
itoa(123, buf, 10);

buf将会是一个字符串数组,正如您所记录的那样。您可能需要增加缓冲区的大小。


4
itoa不是标准的C函数,在所有实现中都可能不存在。 - interjay

0

你可以尝试使用itoa。另一个选择是使用sprintf


1
http://jcatki.no-ip.org/fncpp/cplusplus.com - StoryTeller - Unslander Monica
@StoryTeller 看起来我无法访问这个链接。 - Ivaylo Strandjev
这是一个列举cplusplus(dot)com不适合作为参考网站的原因列表。 - StoryTeller - Unslander Monica
@StoryTeller 嗯,我用它来定义函数,对于大多数标准函数,我觉得它已经足够有用了。在这种特定情况下,我相信我链接的两个函数都在那里有很好的描述。 - Ivaylo Strandjev
1
但它可能会教新手一些不好的习惯。例如,它的许多示例都显示using namespace std;。http://en.cppreference.com/w/是一个由社区管理的参考资料,准确性不亚于前者,并且没有示例中的不良习惯。 - StoryTeller - Unslander Monica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接