Как разработать функцию формирования массива
У меня есть следующее задание: дано натуральное число n. Разработать функцию формирования массива, элементами которого являются цифры числа n. Я написал программу, но что-то не так. Если я ввожу с консоли двузначное число, то она просто ничего не выводит. Если я ввожу трехзначное число, то вызывается исключение. Я подозреваю, что это связано с моей переменной len, а также с тем, как я возвращаю массив из функции. Что и как нужно исправить?
int* BuildArray(int n, int* len);
int main() {
int n, len;
scanf_s("%d", &n);
int * arr = BuildArray(n, &len);
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
return 0;
}
int* BuildArray(int n, int* len) {
int b = n;
while (n > 0) {
n = n / 10;
len++;
}
int* array = (int*)malloc(*len* sizeof(int));
for (int i = len - 1; i >= 0; i--) {
array[i] = b % 10;
b = b / 10;
}
return array;
free(array);
Ответы (1 шт):
Во-первых вы не обнулили переменную len
int n, len = 0;
Во-вторых в этом цикле:
while (n > 0) {
n = n / 10;
len++;
}
Вы прибавляете единицы к указателю, а не к переменной.
Правильно будет так:
while (n > 0) {
n = n / 10;
*len = *len + 1;
}
Такая же проблема в следующем цикле здесь:
for (int i = *len - 1; i >= 0; i--) {
array[i] = b % 10;
b = b / 10;
}
В-третьих память в таком коде никогда не будет освобождена, т.к. будет вызван return.
return array;
free(array);