输出结果是Tom is a male,这个代码错在哪里

#include<stdlib.h>;
#include<stdio.h>;
#include<string.h>;
#pragma warning (disable:4996);
void*my_dele(char*a, char*b)
{
    char*p;
    int n = strlen(b);
    printf("n=%d\n", n);
    while (strstr(a, b) != NULL)
    {
        p = strstr(a, b);
        while (*(p + n) != 0)
        {
            *(p) = *(p + n);
            p++;
        }
    }
    printf("%s\n", a);
    return;
}
    

int main()
{
    char a[] = "Tomcat is a male ccatat";
    char b[] = "cat";
    my_dele(a, b);
    printf("%s\n", a);
    system("pause");
    return 0;

}

给改了一下,主要是while(*(p+n)!=0)循环结束后,要加上*p = 0;不然后面的内容还是在的,只是前移而已,要加上字符串终止符才可以。

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#pragma warning (disable:4996);
void* my_dele(char*a, char*b)
{
	char*p;
	int n = strlen(b);
	printf("n=%d\n", n);
	while ((p = strstr(a, b)) != NULL)
	{
		//p = strstr(a, b);
		while (*(p + n) != 0)
		{
			*(p) = *(p + n);
			p++;
		}
		*p = 0;
	}
	printf("%s\n", a);
	return NULL;
}


int main()
{
	char a[] = "Tomcat is a male ccatat";
	char b[] = "cat";
	my_dele(a, b);
	printf("%s\n", a);
	system("pause");
	return 0;

}