c语言 子函数参数类型错误,如何解决?

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

我写这个子函数,他就说我参数类型有问题,但是我写别的子函数,他也不报错呀

问题相关代码
#include<stdio.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

//Status 为函数的类型,其值是函数结果状态代码,如OK等
typedef int Status; 

// ElemType为数据元素类型,根据实际情况而定,这里假设为int 
typedef int ElemType;  

#define MAXSIZE 50              /* 存储空间初始分配量 */
typedef struct
{
    ElemType data[MAXSIZE];  /* 数组,存储数据元素 */
    int length;              /* 表当前有效长度 */
}SqList;   
void input(SqList *L)
{
    int pre,i=0;
    L->length =0;
    for(i=0;;i++)
    {
        scanf("%d",&pre);
        if(pre==-1)
        {
            break;
        }
        else
        {
            L->data[i]=pre;
            L->length++;
        }
    }
}

void ListInsert_Sq(SqList *L,int i,int e)                    //在L中第i个位置之前插入新的数据元素e,L的长度加1。
{
    // 插入的位置是i
    int j;
    int len=L->length ;
    int b[len+1];
    for(j=0;j<len+1 ;j++)
    {
        if(j<i)
        {
            b[j]=L->data [j];
        }
        else if(j==i)
        {
            b[j]=e;
         } 
         else
         {
             b[j]=L->data [j-1];
         }
     } // 插入后的数全在b 数组中 
     int k;
     L->length =len+1;
     for(k=0;k<len+1;k++)
     {
         L->data [k]=b[k];
     }
}


int main()
{
    int i;
    SqList a;
    ElemType e;
    input(&a);                  // 要修改a数组中的数据,所以传地址 
    ListInsert_Sq(a, 2, 4);    // 在第二个位置之前插入e 

    for(i=0;i<a.length ;i++)
    {
        printf("%d ",a.data [i]);
    }
    return 0;
}

运行结果及报错内容

img

我想要达到的结果

比如输入数组为[1,3,4,3,5],插入后输出应该是[1,4,3,4,3,5]

修改见注释,供参考:

#include<stdio.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

//Status 为函数的类型,其值是函数结果状态代码,如OK等
typedef int Status;

// ElemType为数据元素类型,根据实际情况而定,这里假设为int 
typedef int ElemType;

#define MAXSIZE 50              /* 存储空间初始分配量 */
typedef struct
{
    ElemType data[MAXSIZE];  /* 数组,存储数据元素 */
    int length;              /* 表当前有效长度 */
}SqList;
void input(SqList* L)
{
    int pre, i = 0;
    L->length = 0;
    for (i = 0;; i++)
    {
        scanf("%d", &pre);
        if (pre == -1)
        {
            break;
        }
        else
        {
            L->data[i] = pre;
            L->length++;
        }
    }
}

void ListInsert_Sq(SqList* L, int i, int e)//在L中第i个位置之前插入新的数据元素e,L的长度加1。
{
    // 插入的位置是i                  //修改
    //int j;
    //int len = L->length;
    //int b[len + 1];      修改
    //for (j = 0; j < len + 1; j++)
    //{
    //    if (j < i)
    //    {
    //        b[j] = L->data[j];
    //    }
    //    else if (j == i)
    //    {
    //        b[j] = e;
    //    }
    //    else
    //    {
    //        b[j] = L->data[j - 1];
    //    }
    //} // 插入后的数全在b 数组中 
    int k;
    if (i<1 || i>L->length) return;
    //L->length = len + 1;
    for (k = L->length; k > i - 1; k--)  //for (k = 0; k < len + 1; k++) 修改
        L->data[k] = L->data[k - 1];     //修改
    L->data[k] = e;                     //修改
    L->length++;                        //修改
}
int main()
{
    int i;
    SqList a;
    ElemType e;
    input(&a);                  // 要修改a数组中的数据,所以传地址 
    ListInsert_Sq(&a, 2, 4);    // 在第二个位置之前插入e 
    //ListInsert_Sq(a, 2, 4);  修改
    for (i = 0; i < a.length; i++)
    {
        printf("%d ", a.data[i]);
    }
    return 0;
}