报错显示puts这里有问题 好像代码本身也有问题 想知道怎么改

编写函数int parse(char *str, int *num),用户输入的字符串中包含有若干个数字,要求通过该函数将数字提取出来,并返回数字个数。
输入样例
@@23%%78^^9%%45
输出样例
Total 4 numbers:
23 78 9 45


#include<stdio.h>
int parse(char *str,int *num){
 int k=0;
 
 for(int i=0;str[i]!=0;i++){
     if(str[i]>='0'&&str[i]<'9'){
         num[k]=str[i];
         k++;
     }
 }    
 return k;
}
int main(){
    char str[999];
    int a[999];
    printf("请输入一串字符");
    gets(str);
    parse(str,a);
    printf("总共有%d个数字",parse(str,a));
    puts(a);
    return 0;
}

修改如下,供参考:

#include<stdio.h>
int parse(char *str,int *num)
{
 int k,i,flg;
 for(i=0,flg=1,k=0;str[i]!='\0';i++)
 {
     if(str[i]>='0'&&str[i]<='9'){
         num[k] = num[k]*10 + str[i]-'0';
         flg = 0;
         if(str[i+1] == '\0')
         {
            k++;
            flg = 1;
         }
     }
     else if(flg == 0){
            k++;
            flg = 1;
     }
 }
 return k;
}
int main(){
    char str[999];
    int a[999]={0},k=0,i;
    printf("请输入一串字符");
    gets(str);
    k = parse(str,a);
    printf("Total %d numbers:\n",k);
    for(i=0;i<k;i++)
        printf("%c%d",i==0?'\r':' ',a[i]);  //puts(a);
    return 0;
}

a又不是字符数组,当然不能用puts输出啦
你这个函数也不对,只是统计有多少个数字,不是多少个整数