c语言的高精度减法出错

问题遇到的现象和发生背景

dev5.11高精度减法

遇到的现象和发生背景,请写出第一个错误信息

无输出

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
#include
#include
int main()
{
    void High_Precision_Subtraction(char subtrahend[], int length_subtrahend, char subtractor[], int length_subtractor, int answer[], int size_answer, int* flag);
    char a[100], b[100];
    int c[100];
    scanf("%s", a);
    scanf("%s", b);
    int l1, l2, l3;
    l1 = strlen(a);
    l2 = strlen(b);
    l3 = (l1 > l2) ? l1 : l2;
    int flag;
    High_Precision_Subtraction(a[100], l1, b[100], l2, c[100], l3, &flag);
    if (flag != 0)
    {
        printf("%s", c[100]);
    }
    else
    {
        printf("0");
    }
    return 0;
}
void High_Precision_Subtraction(char subtrahend[], int length_subtrahend, char subtractor[], int length_subtractor, int answer[], int size_answer, int* flag)
{
    //为了保证输入输出的格式统一,所以传入了answer这个指针,而不是直接在原字符串进行加减
    int length_max, length_min;
    if (length_subtrahend < length_subtractor)
    {
        length_max = length_subtractor;
        length_min = length_subtrahend;
    }
    else
    {
        length_max = length_subtrahend;
        length_min = length_subtractor;
    }
    //确定长度
    int temp_ans[100]={0};
    //memset(temp_ans, 0, sizeof(temp_ans));
    int i;
    if ((length_subtrahend < length_subtractor) || ((length_subtrahend ==length_subtractor) && strcmp(subtrahend, subtractor) < 0)) //先比大小 
    {
        *flag = -1;
        for (i = 0; i < length_min; i++)
        {//个位对齐开始作差
            temp_ans[i] += subtractor[length_max - i - 1] - subtrahend[length_min - i - 1];
            if (temp_ans[i] < 0)
            {//当前位是个负数,就向高位借个1就足够了
                temp_ans[i + 1] -= 1;
                temp_ans[i] += 10;
            }    //完成进位
        }
        for (i = length_min; i < length_max; i++)
        {//把剩下的抄回来
            temp_ans[i] = temp_ans[i] + subtractor[length_max - i - 1] - '0';//temp_ans[min]可能是-1,之后的均为0 
        }
    }
    else if ((length_subtrahend >length_subtractor) || ((length_subtrahend ==length_subtractor) && strcmp(subtrahend, subtractor) >0))
    {
        *flag = 1;
        for (i = 0; i < length_min; i++)
        {
            temp_ans[i] += subtrahend[length_max - i - 1] - subtractor[length_min - i - 1];//倒序 
            if (temp_ans[i] < 0)
            {//当前位是个负数,就向高位借个1就足够了
                temp_ans[i + 1] -= 1;
                temp_ans[i] += 10;
            }    //完成进位        
        }
        for (i = length_min; i < length_max; i++)
        {
            temp_ans[i] = temp_ans[i] + subtrahend[length_max - i - 1] - '0';
        }
    }
    else
    {
        *flag = 0;//两数相等 
    }
    //完成相减,并确保是大数减小数
    int last;
    last = 0;
    for (i = length_max - 1;i >= 0;i--)
    {//找到最高位
        if (temp_ans[i] == 0 && temp_ans[i - 1] != 0)
        {
            last = i;
            break;
        }
    }
    //直接逆着赋值
    for (i = 0;i <= last;i++)
    {
        answer[i] = temp_ans[last - i];//输出到answer里面
    }
}

运行结果及详细报错内容

无输出

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

用vs调试过,不过没看懂

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

High_Precision_Subtraction(a[100], l1, b[100], l2, c[100], l3, &flag);
改为
High_Precision_Subtraction(a, l1, b, l2, c, l3, &flag);
你现在是连数组定义和数组指针传递都能搞混
int a[100]表示数组a长度是100
用的时候直接写a,a本身是数组指针
而a[100]是数组里第100个元素,索引从0开始,这里越界了
你后面所有的指针运用都自己检查一遍,应该全是错的
还有,各种不同的数据应该如何print你也要从头开始学,不要想当然的瞎写

至少15行函数调用要改为

  High_Precision_Subtraction(a, l1, b, l2, c, l3, &flag);

由于c是int类型数组,所以不能用%s输出啊,逐个数组元素输出