for (p = k; s[p] != '\0'; p++) {
while (s[p] == t[p] && t[p] != '\0') { p++; }
На этом этапе вы сравниваете строку s
, начинающуюся с позиции p
, со строкой t
, начинающейся с позиции 0. Таким образом, она должна быть не t[p]
, а вместо t[p - k]
.
if (s[p] != t[p] || t[p] != '\0') { i = -1; }
Вам это вообще не нужно - если текущий раздел не совпадает, вы просто оставляете i
при последнем совпадении. (который в любом случае будет равен -1, если совпадений пока не было)