コッチだ、スマソ

char* str_str(const char* base, const char* part)
{
 int i;
 unsigned long h1 = 0, h2 = 0;
 size_t len1 = strlen(base), len2 = strlen(part);
 char *p1 = base, *p2 = part, *l = base + len2, *end = base + len1;
 
 if (len1 < len2)
  return NULL;
 for (i = 0; i < len2; i++) {
  h1 += base[i];
  h2 += part[i];
 }
 for (; h1 != h2 || strcmp(p1, p2); ++p1, ++l) {
  if (l == end)
   return NULL;
  h1 -= *p1;
  h1 += *l;
 }
 return p1;
}