Печать строки показывает символы
Я пытаюсь написать функцию 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
функция.