C语言指针有关的提问

C语言,有哪个兄弟可以帮我看一下,就是b数组在进入最后一个循环以后死循环了,刚学习C语言,不胜感激

img

img

贴源码

仅供参考!满意请采纳,谢谢!
防止连续数字太长,整型溢出!所以我用了字符数组接收截取的各个连续数字串。具体可自行更改。

img

img

img

img

img

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

//找到第一个数字串 没有返回-1
//并且把发现的数字串复制到dst数组中
//返回截已经截取过的字串的下一个位置索引
int getsFirstDigis(char *res, char *dst)
{
    const char s0[] = "0123456789";
    int len = strlen(res);
    int n1 = strcspn(res, s0);
    int n2 = strspn(res, s0);

    //第一个不是数字 n1>0  n2=0
    int index1 = 0;
    int index2 = 0;
    char *p1 = res;
    char *p2 = NULL;
    if (n1 == len)
        return -1;
    else if (n1 > 0)
    {
        index1 = n1;
        p1 = res + n1;
        p2 = p1;
        while (*p2 >= '0' && *p2 <= '9')
        {
            p2++;
        }
        int tmp = p2 - p1;
        strncpy(dst, p1, tmp);

        return p2 - res;
    }
    //第一个是数字
    else
    {
        index1 = 0;
        index2 = n2;
        strncpy(dst, res, n2);
        return index2;
    }

    return -1;
}

int main(int argc, char *argv[])
{
    char s[2048];
    char a[2048][2048];
    int k = 0;
    int index = -2;
    int slen;
    char *p = s;

    scanf("%[^\n]s", s);
    slen = strlen(s);

    while (index != -1 && p - s < slen)
    {
        index = getsFirstDigis(p, a[k]);
        if (index >= 0)
        {
            p += index;
            k++;
        }
    }
    for (int i = 0; i < k; i++)
    {
        puts(a[i]);
    }
    printf("\n一共有%d个\n", k);

    return 0;
}