Memory searcher function test
The compiler gives me several warnings:


st.c: In function 'main':
st.c:34:5: warning: initialization makes integer from pointer without a cast [enabled by default]
     Range iRange = {test, test + 50};
     ^
st.c:34:5: warning: (near initialization for 'iRange.offset') [enabled by default]
st.c:34:5: warning: initialization makes integer from pointer without a cast [enabled by default]
st.c:34:5: warning: (near initialization for 'iRange.terminal') [enabled by default]



Indeed, your program has many casts from unsigned long to char *.
You shouldn't ignore warnings, and strive to eliminate them all.



There seem to be several problems with this piece:


    if(string[c + strlen(string) - 1] == '\0')
        break;



First of all, calling strlen in every iteration of the loop is wasteful,
it would be better to call it once before and cache the length in a variable.

Secondly, I doubt this is intended behavior.
This statement will cause the loop to exit when c = 1.
So if your test string is "Looking for S Sample string" and the string parameter is "Sample", then the output will be "S Sample string" instead of "Sample string".
So this looks like a bug.
Perhaps you're looking for something like if (c == len) { i -= c - 1; break; } (where len is strlen(string), cached before the loop). 



The variable names don't seem great.
Why not simply range instead of iRange?
How about target instead of string?
Why use Range at all instead of two variables?