sizeof(p) → strlen(p)
s-(i-1) → s-i

exit(1); が凄い気になるが・・・。
NULL 返したのでいいんじゃないかな。
for 使ってないあたりも読みづらい。