>>815 続きです
q = bufw + (p - bufr);
p - bufrで p が bufrから見て何文字目かが分かります(最初の文字は0番)
bufw から〜文字目にstr1と同じ文字列があるかを足すのでqにはbufw にあるstr1と同じ文字列の先頭ポインタが入ります

strcpy(q+strlen(str2), p+strlen(str1));
ここはややこしいです
q+strlen(str2)
bufwのstr1が見つかった最初のポインタにstr2の文字数を足した位置に
p+strlen(str1)
bufrのstr1以降(str1は除く)の文字列をコピーします
これで置換が成立するわけです