Печать строки показывает символы

Я пытаюсь написать функцию 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();
}

1 ответ

Если вы пытаетесь получить массив числовых символов (как это видно по print_string(а) функцию), вам нужно соответствующим образом настроить значения:

*strptr = number % 10 + '0';

Согласно вашему выводу отладки ('\x2', '\x5', '\x5'), вы правильно получаете отдельные цифры числа, но это двоичные значения, а не представления символов.

Превращение первого в последнее включает добавление '0' (0x30, если вы используете ASCII, например). C гарантирует, что числовые значения являются смежными, так что это безопасно.


(а)... который, кстати, можно заменить простым:

printf("%s", number_in_string);

в вашем main функция.

Другие вопросы по тегам