Here is one I wrote a long time ago as a comparison between a similar function in gawk.
It's ugly and needlessly recursive, but maybe it
will give you some ideas.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *Strsrch(char *,char *,int,int,int);
int main(int argc, char *argv[]) {
char *tstr;
tstr = Strsrch(argv[1],argv[2],0,0,0);
printf("%s\n", tstr);
return 0;
}
char *Strsrch(char *str, char *pat, int st, int ind, int flg) {
int x,t;
int xlen = strlen(str);
int plen = strlen(pat);
char *buf = malloc(strlen(str) * sizeof(char));
if (ind == plen) {
st = st - plen;
printf("%d index, Marker = %d, string match = %s\n", ind, st, str + st);
str = str + st;
printf("%s after truncation\n", str);
strncpy(buf,str,strlen(str));
return buf;
}
x = ind;
for (t=st ; t < xlen ; t++) {
if (str[t] == pat[ind]) {
printf("Comparing %c with %c ==match at %d\n", str[t], pat[ind],t);
t++;
x++;
return Strsrch(str,pat,t,x,1);
} else if (str[t] != pat[ind] && flg) {
printf("Failed to continue match at %d , %c\n", ind, pat[ind]);
t++;
return Strsrch(str,pat,t,0,0);
}
}
strcpy(buf,"NOMATCH"

;
return buf;
}