Цитата(west329_ @ Feb 25 2009, 13:20)

Всё работает как надо, благодарю за помощь. За ради интереса, собрал несколько аналогичных функций.
Эксперементировать надо с умом (простите, но гляда на то что Вы пишите у меня сердце кровью обливается).
Купите книжку по СИ и перечитайте её несколько раз - эти трудозатраты с лихвой окупятся.
Для общего развития:
1. На каждый malloc() должен быть свой free().
2. strncpy(s1,s2,n) копирует строку s2 в s1, но не более n символов, поэтому нас не интересует длина s2,
т.к. любая строка заканчивается '\0', а приёмный буфер (строка s1) имеет максимальную длину не меньше n.
И ещё, прикинте сколько машинных циклов добавят вызовы этих процедур: malloc() и free().
Да, можно еще немного оптимизировать:
Код
char* strstr_P(const char* s1, flash char* s2)
{
#define MAX_STR_LEN 30
char buf[MAX_STR_LEN];
buf[MAX_STR_LEN - 1] = '\0';
return strstr(s1, strncpy_P(buf, s2, MAX_STR_LEN-1));
}