Вывод непонятных символы в си

Задача состоит в том, чтобы написать функцию по поразрядному сложению двух длинных чисел. При запуске выводятся непонятные символы. Код ниже и он тестовый, первое число всегда будет больше второго. Буду рад, если кто то поможет

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int findDigitsCount(long num){
    int digits_count = 0;
    while(num>0){
        num /=10;
        digits_count++;
    }
    return digits_count;
}

int findMax(int num1, int num2){
    if(num1 >= num2){
        return num1;
    }
    else{
        return num2;
    }
}

char * additionNumbers(char * num1, char * num2, int digits_count1, int digits_count2){
    int max_digits_count = findMax(digits_count1, digits_count2);
    int remainder = 0;
    if(max_digits_count==digits_count1){
        for(int i = max_digits_count; i!=0; i--){
            num1[i] = ((num1[i] - '0') + (num2[i] - '0') + remainder) + '0';
            remainder = num1[i] / 10;
            num1[i] %= 10;
        }
    }
}

int main(){
    long num1, num2;
    printf("Input first num: ");
    scanf("%ld", &num1);
    printf("Input second num: ");
    scanf("%ld", &num2);
    int digits_count1 = findDigitsCount(num1);
    char * char_num1 = malloc(sizeof(char) * (digits_count1+1));
    sprintf(char_num1, "%ld", num1);
    int digits_count2 = findDigitsCount(num1);
    char * char_num2 = malloc(sizeof(char) * (digits_count2+1));
    sprintf(char_num2, "%ld", num2);
    additionNumbers(char_num1, char_num2, digits_count1, digits_count2);
    printf("%s", char_num1);
    free(char_num1);    
    free(char_num2);
    getchar();
    getchar();
}

Ответы (1 шт):

Автор решения: Sergey

Для начала:

  1. У вас функция findDigitsCount(num1) вызывается два раза с одним и тем же аргументом num1. А num2 вообще не используется.
  2. В функции additionNumbers() есть оператор if(max_digits_count==digits_count1){ но в нём нет ветки else. Что должно происходить, если равенства нет?
  3. Функция char * additionNumbers объявлена, как возвращающая указатель. Но в ней нет ни одного оператора return.
  4. В этой же функции есть оператор remainder = num1[i] / 10; Проблема в том, в num1[i] хранится код символа. Делить его на число 10 абсолютно бессмыслленно.
→ Ссылка