从主串s1中删除子串s2并打印s1

#include <stdio.h>
int main()
{
    char s1[80],s2[80],s3[80];
    char *p;
    scanf("%s%s",s1,s2);
    while((p=strstr(s1,s2))!='\0')
    {
        *p='\0';
        strcpy(s3,p+strlen(s2));
        strcat(s1,s3);
    }
    puts(s1);
}

求大佬解释一下while循环中 *p='\0';
        strcpy(s3,p+strlen(s2));

的意思是什么,不太懂这两步。

谢谢!

C/C++里字符串结尾是0字节,就是'\0'。*p='\0'; 是把字符串s1在p所指的位置掐断。然后在原来s1串里面跳过s2字串,拷贝到s3。再把s3接到掐断后的s1后面。也就是把字串s2从s1里去掉了。