如何将纯数字字符型数组转换为四个一组整形数组?

下面是源代码,但是有好多bug,但是实在找不到

问题相关代码,请勿粘贴截图
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

int max(a, b)
{
    if (a > b) return a;
    else return b;
}
int min(a, b)
{
    if (a < b) return a;
    else return b;
}
void tidy(char* s1, char* s2,int *s1_4,int *s2_4,int j1,int j2)
{
    
    int i;
    j1 = j2 = 0;
    //转换为4位整数组
    for (i = 0; i < 100; i += 4)
    {
        s1_4[j1] = ((int)s1[i] - 48) * 1000 + ((int)s1[i + 1] - 48) * 100 + ((int)s1[i + 2] - 48) * 10 + ((int)s1[i + 3] - 48);
        if (s1_4[j1] == 0)
            break;
        j1++;
    }
    for (i = 0; i < 100; i += 4)
    {
        s2_4[j2] = ((int)s2[i] - 48) * 1000 + ((int)s2[i + 1] - 48) * 100 + ((int)s2[i + 2] - 48) * 10 + ((int)s2[i + 3] - 48);
        if (s1_4[j1] == 0)
            break;
        j2++;
    }
    //数组反序,实现数位对齐
    int start = 0, end1 = j1, end2 = j2;
    int temp;
    while (start < end1)
    {
        temp = s1_4[end1];
        s1_4[end1] = s1_4[start];
        s1_4[start] = temp;
        start++;
        end1--;

    }
    start = 0;
    while (start < end2)
    {
        temp = s1_4[end1];
        s1_4[end1] = s1_4[start];
        s1_4[start] = temp;
        start++;
        end1--;

    }
    
}
void main()
{
    int j1 = 0, j2 = 0;
    int s1_4[25], s2_4[25];
    int i;
    char s1[100], s2[100];
    memset(s1, '0', sizeof(s1));
    memset(s2, '0', sizeof(s2));
    printf("输入两个大整数,回车结束:");
    gets(s1);
    gets(s2);
    tidy(s1, s2, s1_4, s2_4, j1, j2);
    printf("\nresult:\n");
    for (i = 0; i < j1; i++)
    {
        printf("%d", s1_4[i]);
    }
    printf("\n");
    for (i = 0; i < j2; i++)
    {
        printf("%d", s2_4[i]);
    }
}

运行结果及报错内容

img

我的解答思路和尝试过的方法
我想要达到的结果

void tidy(char *s, int *s_4, int *j)  //按4位转换成整数,对齐没看明白。
{
    int i;
    *j = 0;
    //转换为4位整数组
    int len = strlen(s);
    for(i = 0; i < len; i++)
    {
        s_4[*j] = s_4[*j] * 10 + (s[i] - '0');

        if((i+1) % 4 == 0)
            (*j)++;
    }
    if(s_4[*j]!=0)(*j)++;
}

int main()
{
    int i, j1 = 0, j2 = 0;
    int s1_4[25]= {0}, s2_4[25]= {0};
    char s1[100]= {0}, s2[100]= {0};
    //memset(s1, '0', sizeof(s1));
    //memset(s2, '0', sizeof(s2));
    printf("输入两个大整数,回车结束:\n");
    gets(s1);
    gets(s2);
    //tidy2(s1, s2, s1_4, s2_4, &j1, &j2);//参数在函数里修改后把值带回来,需要用指针。
    tidy(s1, s1_4, &j1);
    tidy(s2, s2_4, &j2);
    printf("\nresult:\n");

    for(i = 0; i < j1; i++)
    {
        printf("%d ", s1_4[i]);
    }

    printf("\n");

    for(i = 0; i < j2; i++)
    {
        printf("%d ", s2_4[i]);
    }

    return 0;
}

你的代码修改如下,修改位置有标注:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int max(a, b)
{
    if (a > b) return a;
    else return b;
}
int min(a, b)
{
    if (a < b) return a;
    else return b;
}
void tidy(char* s1, char* s2, int* s1_4, int* s2_4, int *j1, int *j2)
{

    int i;
    //j1 = j2 = 0;
    //转换为4位整数组
    for (i = 0; i < strlen(s1); i += 4)          //使用strlen(s1)获取数组长度
    {
        s1_4[*j1] = ((int)s1[i] - 48) * 1000 + ((int)s1[i + 1] - 48) * 100 + ((int)s1[i + 2] - 48) * 10 + ((int)s1[i + 3] - 48);
        if (s1_4[*j1] == 0)
            break;
        (*j1)++;
    }
    for (i = 0; i < strlen(s2); i += 4)          //使用strlen(s1)获取数组长度
    {
        s2_4[*j2] = ((int)s2[i] - 48) * 1000 + ((int)s2[i + 1] - 48) * 100 + ((int)s2[i + 2] - 48) * 10 + ((int)s2[i + 3] - 48);
        if (s1_4[*j1] == 0)
            break;
        (*j2)++;
    }
    //数组反序,实现数位对齐
    int start = 0, end1 = *j1-1, end2 = *j2-1;    //end=*j1-1,因为序号从0开始
    int temp;
    while (start < end1)
    {
        temp = s1_4[end1];
        s1_4[end1] = s1_4[start];
        s1_4[start] = temp;
        start++;
        end1--;

    }
    start = 0;
    while (start < end2)        //end1改成end2,s1_4改成s2_4
    {
        temp = s2_4[end2];
        s2_4[end2] = s2_4[start];
        s2_4[start] = temp;
        start++;
        end1--;

    }
}
void main()
{
    int j1 = 0, j2 = 0,*p1=&j1,*p2=&j2;     //分别定义指针p1、p2指向j1、j2,并传入函数,否则执行完函数后,j1、j2还是等于0
    int s1_4[25], s2_4[25];
    int i;
    char s1[100], s2[100];
    memset(s1, '0', sizeof(s1));
    memset(s2, '0', sizeof(s2));
    printf("输入两个大整数,回车结束:");
    gets(s1);
    gets(s2);
    tidy(s1, s2, s1_4, s2_4, p1, p2);   //传入指针
    printf("\nresult:\n");
    for (i = 0; i < j1; i++)
    {
        printf("%d", s1_4[i]);
    }
    printf("\n");
    for (i = 0; i < j2; i++)
    {
        printf("%d", s2_4[i]);
    }
}