Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   strpos error (http://www.go4expert.com/forums/strpos-error-t17754/)

CrazyGal 30May2009 22:27

strpos error
 
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;

}


xpi0t0s 30May2009 23:11

Re: strpos error
 
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 31May2009 06:49

Re: strpos error
 
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 31May2009 07:47

Re: strpos error
 
Quote:

Originally Posted by CrazyGal (Post 48653)
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 31May2009 16:46

Re: strpos error
 
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.

CrazyGal 31May2009 23:39

Re: strpos error
 
Oops! That's a typo. I meant '==' and that's precisely I've in my code :)

Thanks,
Tina


All times are GMT +5.5. The time now is 13:00.