Arrays 为什么我在尝试将整数拆分为十进制数字时会得到奇怪的输出?
数字被完美地分割,但是当分配给char数组时,似乎有一些内存损坏。在每一个大于或等于10000的数字中,10000处的数字被破坏,并给出类似的输出:Arrays 为什么我在尝试将整数拆分为十进制数字时会得到奇怪的输出?,arrays,c,Arrays,C,数字被完美地分割,但是当分配给char数组时,似乎有一些内存损坏。在每一个大于或等于10000的数字中,10000处的数字被破坏,并给出类似的输出: ► {‼░ ↔ @ A.■ ♣ 不返回位数,但返回整数的大小(字节)。这意味着它返回4,而不是10(或更多)。sizeof(int)不是nb的小数位数,以防这是您所期望的。您已经有了一个线索,在位数方面,小于10000的数字与大于等于10000的数字之间的主要区别是什么?请尝试输入prin
► {‼░ ↔ @ A.■ ♣
不返回位数,但返回整数的大小(字节)。这意味着它返回4,而不是10(或更多)。
sizeof(int)
不是nb
的小数位数,以防这是您所期望的。您已经有了一个线索,在位数方面,小于10000的数字与大于等于10000的数字之间的主要区别是什么?请尝试输入printf(“int的大小是%zu\n”,sizeof(int));
作为函数中的第一条语句,要获取将十进制数字存储为字符串所需的字节数,请使用(int)ceil(log10(256)*sizeof(int))+1
(+1
用于存储最后的\0
字节)…您需要#包括,在您的案例中,您似乎没有存储最后的\0
字节,但99%的时间您希望:)
#include <unistd.h>
void ft_putnbr(int nb)
{
char character[sizeof(int)];
int i;
i = 0;
while (nb > 0)
{
character[i] = (nb % 10) + 48; // Split up the number into characters
nb /= 10; // Remove the number at the ones
i++;
}
while (i >= 0)
{
write(1, &character[i - 1], 1);
i--;
}
}
int main (void)
{
ft_putnbr(2147483647);
}
sizeof(int)