这个删除串S中所有与串T相同的子串的程序中,小弟我调试到SubString中的str1[i] = str2[j];时,就有错了。

这个删除串S中所有与串T相同的子串的程序中,我调试到SubString中的str1[i] = str2[j];时,就有错了。。
程序直接停止工作了,不知道问题在哪里?
#include <stdio.h>
#include <string.h>

int StrCompare (char * str1, char * str2) //比较str1和str2的大小
{
  while (* str1 && * str2)
  {
  if (* str1 != * str2) return *str1 - *str2;
  str1++; str2++;
  }
  if (* str1) return 1;
  return 0;
}

void StrDelete (char * S, int pos, int len) //删除pos个字符起长度为len的子串
{
  int i, j;
  for (i = pos, j = pos + len; j < strlen (S); i++, j++)
  S[i] = S[j];
  S[i] = '\0';
}

int SubString (char * str1, char * str2, int pos, int len) //用str1返回str2中的第pos个字符起长度为len的子串
{
  int i, j;
  if (pos < 0 || pos > strlen (str2) - 1 || len < 0 || len > strlen (str2) - pos)
  return 0;
  for (i = 0, j = pos; i < len; i++, j++)
  str1[i] = str2[j]; //这个地方报错
  str1[i] = '\0';
  return 1;
}

void DeleteSame (char *S, char * T) //删除串S中所有与串T相同的子串
{
  int i, m ,n;
  char * Sub = NULL;
  m = strlen (S);
  n = strlen (T);
  for (i = 0; i < m; )
  {
  SubString (Sub, S, i, n);
  if (StrCompare (Sub, T) != 0) i++;
  else {
  StrDelete (S, i, n);
  i += n;
  }
  }
}

int main(void)
{
  char str1[] = "abcdefabc";
  char str2[] = "cd";
  DeleteSame (str1, str2);
  puts (str1);
  return 0;
}

------解决方案--------------------
str1未分配内存
------解决方案--------------------
char * Sub = NULL; 没空间啊
把sub申明成一个足够长的数组吧,
没仔细看,根据需要,最好初始化成全'\0'
------解决方案--------------------
单步调试和设断点调试是程序员必须掌握的技能之一。