-1

我正在尝试使用指针编写一个 ITOA(整数到数组)函数。

所以这就是我到目前为止所得到的。我调试了它,它工作得很好。问题是,打印本身不起作用。我正在添加两个屏幕截图。

将不胜感激一些帮助。

int num_length(int number)
{
    int count = 0;

    while (number > 0)
    {
        count++;
        number /= 10;
    }

    return count;
}

void itoa(int number, char *strptr)
{
    int number_len = num_length(number);
    char *start = strptr;
    strptr += number_len - 1;

    while (strptr >= start)
    {
        *strptr = number % 10;
        number /= 10;
        strptr--;
    }
}

void print_string(char *strptr)
{
    while (*strptr != '\0')
    {
        printf("%c", *strptr);
        strptr++;
    }
}

void main(void)
{
    int number;
    char number_in_string[N] = { '\0' };
    char *strptr = &(number_in_string[0]);
    printf("Enter a number: ");
    scanf_s("%d", &number);

    itoa(number, strptr);

    print_string(number_in_string);
    getch();
}

4

1 回答 1

2

如果您尝试获取数字字符数组(您的print_string(a)函数似乎很明显),则需要适当地调整值:

*strptr = number % 10 + '0';

根据您的调试输出 ( '\x2', '\x5', '\x5') ,您正确获取了数字的各个数字,但这些数字是二进制值,而不是字符表示。

将前者转换为后者涉及添加'0'(例如,如果您使用 ASCII,则为 0x30)。C 保证数值是连续的,因此这是安全的。


(a) ...顺便说一句,可以用一个简单的替换:

printf("%s", number_in_string);

在你的main功能中。

于 2016-10-14T11:41:47.523 回答