fgets函数问题,也不懂报错内容

fgets()与get() 两个函数的出错

#include
#include
#include
int main(void)
{
    /*********Begin*********/
    char s1[150], s2[150], s3[150];
    int f, m, n, i, j = 0, k = 0;  
    m = strlen(s1);
    n = strlen(s2);
    fgets(s1,m,stdin);
    fgets(s2,n,stdin);
    scanf("%d", &f);
    for (i = f; i < m; i++)
    {
        s3[k++] = s1[i];
    }
    for (i = f; i < n + f + 1; i++)
    {
        s1[i] = s2[j++];
    }
    strcat(s1, s3);
    s1[m + n] = '\0';          //使s1与s2连接后的s1的最后为'\0'
    printf("%s", s1);

    /*********End**********/
    return 0;
}

报错:1>D:\Java课程资料\code\Project3.cpp(9,19): warning C4267: “=”: 从“size_t”转换到“int”,可能丢失数据
1>D:\Java课程资料\code\Project3.cpp(10,16): warning C4267: “=”: 从“size_t”转换到“int”,可能丢失数据
为什么呢?报错内容我也不懂什么意思
其实原来版本是

#include
#include
#include
int main(void)
{
    /*********Begin*********/
      char s1[150],s2[150],s3[150];
    int f,m,n,i,j=0,k=0;
    gets(s1);
    gets(s2);
    scanf("%d",&f);
    m=strlen(s1);
    n=strlen(s2);
    for(i=f;ifor(i=f;i1;i++)
    {
        s1[i]=s2[j++];
    }
    strcat(s1,s3);
    s1[m+n]='\0';          //使s1与s2连接后的s1的最后为'\0'
    printf("%s",s1);

    /*********End**********/
    return 0;
}

但是在visual studio 2022中运行会出错,
没定义标识符gets 没找到标识符gets 希望能帮忙解决一下,谢谢

    m = strlen(s1);
    n = strlen(s2);
 

这俩求数组长度的时候,数组还没有初始化,应该先输入数组,再求长度


fgets(s1,150,stdin);
    fgets(s2,150,stdin);

    m = strlen(s1);
    n = strlen(s2);