求!c语言如何替换一个字符串中的指定英文单词

题目是这样的,输入一个字符串,把这个字符串中的apple改成orange,不改变其他字符串。
由于两个单词长度不一样,所以要把apple后面的字符串往后移,我的想法是将apple前后的字符串 拆开,插入orange后再拼回来
具体代码如下,编译器用的devc++

#include<stdio.h>
# include <string.h>

int main(void)
{
    char ch[100];   //存放旧句子
    int i=0, p=0, j;
    char a[7]="orange";
    char b[100];    //存放新句子
    
    gets(ch);  //用来读取句子
                                //p指向ch,i指向b,j指向a
    while(ch[p] != '\n')
    {
        if(ch[p]=='a'&&ch[p+1]=='p'&&ch[p+2]=='p'&&ch[p+3]=='l'&&ch[p+4]=='e')  //找到apple单词 
        {
            for(j=0;j<6;j++)  //如果找到了apple,那么新句子就不从原句子中拿单词,改成拿orange插入进去 
            {
                b[i]=a[j];   
                i++;    
            }    
            p += 5;        //不能影响读取原句子apple后面的单词,所以要让p指回apple后面的字符 
        }
        else
        {
            b[i] = ch[p];   //如果没有找到apple,就从原句子中读取单词 
            i++;
            p++;    
        }    
    }
    puts(b);
    
    return 0;
} 

但运行结果有误,完全无法把字符串输出,到底是什么原因,看了好久没看出来