为什么这个程序运行输入数据就会出错,强制性地退出Turbo C(55555,哪位高手能告诉小弟我有关问题出在哪里呀?)

为什么这个程序运行输入数据就会出错,强制性地退出Turbo C(55555,谁能告诉我问题出在哪里呀?)
题目:用指定字符串s1置换字符串s2中从第n个开始往后的串。(用指针参数实现)。

#include   "stdio.h "
#include   "string.h "
#include   "alloc.h "
char   sstring(char   *s1,char   *s2,int   n)
{int   i=0,j=n;
  while   (s1+i)
{*(s2+j)=*(s1+j);i++;j++;}
  }

void   main()
{char   *s1,*s2,str1[20],str2[20];
{char   (*pf)();
  int   n;
  scanf( "%d ",&n);
  gets(str1);
  gets(str2);
  s1=(char   *)malloc(strlen(str1)+1);
  s2=(char   *)malloc(strlen(str2)+1);
  strcpy(s1,str1);
  strcpy(s2,str2);
  pf=sstring;
  (*pf)(s1,s2,n);
  puts(s2);
}  




------解决方案--------------------
1
char sstring(char *s1,char *s2,int n)必须返回值

2
定义的函数指针应该是:
char (*pf)(char *, char *,int);

这样才能和参数匹配
------解决方案--------------------
晕,不知所云,干吗要搞得那么复杂。。。

#include <stdio.h>
#include <string.h>
char *sstring(char *s1,char *s2,int n)
{
int i=0,j=n;
char *ptr = s2;
while (s1[i])
{
*(s2+j)=*(s1+i);
i++;
j++;
}
*(s2+j) = '\0 ';

return ptr;
}

void main()
{
char str1[20],str2[20];
char *pf;
int n;
scanf( "%d ", &n);
fflush(stdin);
gets(str1);
gets(str2);
pf=sstring(str1, str2, n);
puts(pf);
}



------解决方案--------------------
是不是要求用指针函数?
------解决方案--------------------
是不是只要输入完n后,就关了,你在scanf( "%d ",&n);后面加个getchar();试试
没装TC,没实验一下,你自己试试