编写一个求字串的函数sub_str(char *s1,char *s2,int m,int n),作用是将字符串s1中从第m个字符开始的n个字放入字符串s2中;该怎么处理

编写一个求字串的函数sub_str(char *s1,char *s2,int m,int n),作用是将字符串s1中从第m个字符开始的n个字放入字符串s2中;
编写一个求字串的函数sub_str(char *s1,char *s2,int m,int n),作用是将字符串s1中从第m个字符开始的n个字放入字符串s2中;
问题出在什么地方,求高手指出问题的地方
#include"stdio.h"
#include"string.h"
  void sub_str(char *s1,char *s2,int m,int n){
   

  int l1,l2,i;
   
  l2=strlen(s2);
  for(i=m;i<=n;i++)
  {
   
  (s2+l2-1)++=(s1+m-1)++;}
  printf("%s",s2);}
  int main(){
  int m=0,n=0;
  char* s1;
  char* s2;
  char a[80],b[80];
  s1=a;
  s2=b;
  printf("输入字符串1");
  gets(s1);
  printf("输入字符串2"); 
  gets(s2);
  printf("输入m和n的值");
  scanf("%d %d",&m,&n);
  sub_str(s1,s2,m,n);}

------解决方案--------------------
实现得文艺一点应该像下面
C/C++ code
void sub_str(char *s1,char *s2,int m,int n){
    memcpy(s2,s1+m,sizeof(char)*n);
}

------解决方案--------------------
下标从0算还是1算,根据自己的需要选择就可以了
------解决方案--------------------
仅供参考,虽然不是C语言。(字符串下标从1开始数)
C/C++ code
func strmid(len,str1,str2,pos)
dec
    var string1:127;
enddec
    string1=ljust(str1," ",len);
    if (pos eq 1)
        string1=str2
               &substr(string1, pos+length(str2));
    else
        string1=substr(string1, 1, pos-1)
               &str2
               &substr(string1, pos+length(str2));
    endif
    string1=substr(string1,1,len);
    return string1;
endfunc

------解决方案--------------------
代码我就不贴了, 没意思, LZ,貌似是你在赋值那个循环后没有加个'\0' , 也就是s2[i] = '\0' ,亲 , 不信你可以试一下.