Следующая полная программа показывает один из способов сделать это.Он использует целые числа без знака, чтобы не беспокоиться о преобразовании - вы не указали, что должно произойти для отрицательных чисел, поэтому, как и любой хороший консультант, я сделал так, чтобы проблема исчезла для собственного удобства: -)
Он в основном определяет необходимый размер массива и выделяет его.Сам массив имеет в начале один элемент, определяющий, сколько элементов в массиве (длина int
).
Каждый последующий элемент представляет собой последовательность цифр.Приведенный ниже код main
показывает, как его обрабатывать.
Если он не может создать массив, он просто вернет вам NULL - вы также должны помнить, чтобы освободить память, переданную обратно, как только выс этим покончено.
#include <stdio.h>
#include <stdlib.h>
int *convert (unsigned int num) {
unsigned int *ptr;
unsigned int digits = 0;
unsigned int temp = num;
// Figure out how many digits in the number.
if (temp == 0) {
digits = 1;
} else {
while (temp > 0) {
temp /= 10;
digits++;
}
}
// Allocate enough memory for length and digits.
ptr = malloc ((digits + 1) * sizeof (unsigned int));
// Populate array if we got one.
if (ptr != NULL) {
ptr[0] = digits;
for (temp = 0; temp < digits; temp++) {
ptr[digits - temp] = num % 10;
num /= 10;
}
}
return ptr;
}
Эта convert
функция выше - это "мясо" - она выделяет целочисленный массив для размещения длины (индекс 0) и цифр (индексы с 1 по N, где N - числоцифр).Следующей была тестовая программа, которую я использовал.
int main (void) {
int i;
unsigned int num = 12345;
unsigned int *arr = convert (num);
if (arr == NULL) {
printf ("No memory\n");
} else {
// Length is index 0, rest are digits.
for (i = 1; i <= arr[0]; i++)
printf ("arr[%d] = %u\n", i, arr[i]);
free (arr);
}
return 0;
}
Вывод:
arr[1] = 1
arr[2] = 2
arr[3] = 3
arr[4] = 4
arr[5] = 5