strpos error

CrazyGal's Avatar, Join Date: May 2009
Go4Expert Member
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;

}

Last edited by shabbir; 31May2009 at 07:07.. Reason: Code blocks
xpi0t0s's Avatar, Join Date: Aug 2004
Mentor
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.
CrazyGal's Avatar, Join Date: May 2009
Go4Expert Member
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!
SaswatPadhi's Avatar, Join Date: May 2009
~ Б0ЯИ Τ0 С0δЭ ~
Quote:
Originally Posted by CrazyGal View Post
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 don't believe it ! How can it work ?
You should change it to pb == (b + strlen(b) -1) not pb = (b + strlen(b) -1)
xpi0t0s's Avatar, Join Date: Aug 2004
Mentor
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.

Last edited by xpi0t0s; 31May2009 at 16:53..
CrazyGal's Avatar, Join Date: May 2009
Go4Expert Member
Oops! That's a typo. I meant '==' and that's precisely I've in my code

Thanks,
Tina