Hi there, Could someone tell me why this aint working? I understand this could be done using strstr() function. I just gave it a try and I cant quite figure out why this piece of code returns NULL though the search string is present in the main string. Please let me know. Thanks, Tina Code: #include <stdio.h> char * strpos(char *, char *); int main() { char s[] = "I love my job"; char t[] = "job"; char *pos = strpos(s, t); printf("%s", pos); return 0; } char * strpos(char *a, char *b) { char *pa; char *pb; for(; *a; a++ ) for(pa = a, pb = b; *pb && (*pa == *pb); pa++, pb++ ) if(*pb == '\0') return a; return NULL; }
If *pb is NULL, do you think "*pb && (*pa == *pb)" will evaluate TRUE or FALSE? BTW, please use code blocks when posting code. It preserves the formatting and makes it much more readable.
It will evaluate to False. Yea, I figured out my mistake. I changed *pb == '\0' to pb = (b + strlen(b) -1) and it worked. I'll start using code blocks from my next post. Sorry about that! Thanks!
I don't believe it ! How can it work ? You should change it to pb == (b + strlen(b) -1) not pb = (b + strlen(b) -1)
In my fix I just removed pb from the test, i.e. Code: for(pa = a, pb = b; (*pa == *pb); pa++, pb++ ) Edit: Oops! This only works if t is at the end of s. This works; tested with s="abcjobxyz" and t="job" Code: while (*pb && (*pa == *pb)) { if(pb == (b + strlen(b) -1)) return a; Edit2: SaswatPadhi's right, you ALWAYS need to be suspicious of a single = in an expression of any type. = and == are NOT the same. if (a=b) is valid; it assigns b to a then evaluates TRUE or FALSE depending on the value of both, so it's useful in stuff like while (x=somefunc()) where somefunc returns zero when it's finished.