how to use strstr?

Hello group,


I'm trying to parse an html tag in an array assume called "buf". buf has the contents of an html file I have read from a server. Now, when I use strstr() to find a string or tag in there I get segmentation as well. I thought this example will be fine but it is not.

Can you please tell me what is the best approach here?


Any help is appreciated.

thanks,
ak



htmlcontent = buf;
 
char* needle = "<TITLE>";
char* heystack = buf;
 
printf(">>>The first character found: %c", strstr(heystack, needle));

Open in new window

akohanAsked:
Who is Participating?
 
Infinity08Connect With a Mentor Commented:
Can you add this line just before the line where you call strstr :

        printf("\nHTML :\n%s\n\n", heystack);

and post the output here ?
0
 
Infinity08Commented:
strstr returns a char*, which is either NULL (in case the string is not found) or points to the firs tlocation where the string is found.

So there are two problems with that code :

1) You have to check the return value of strstr for NULL, and NOT print it if it's NULL

2) you have to use the proper %s format (%c is for a single character)
0
 
sweetfa2Commented:
Is your heystack null terminated?
0
Evaluating UTMs? Here's what you need to know!

Evaluating a UTM appliance and vendor can prove to be an overwhelming exercise.  How can you make sure that you're getting the security that your organization needs without breaking the bank? Check out our UTM Buyer's Guide for more information on what you should be looking for!

 
akohanAuthor Commented:

sorry I forgot to say that I solved that issue my recent issue is that I am not getting anything. However, <title> is in the buf.

Any comments?

Regards.
0
 
akohanAuthor Commented:

heystack is a char*

0
 
Infinity08Commented:
>> Any comments?

The comments I already made ;)


Can you show the exact code you use, as well as how you verified that "<title>" was really in buf ?
0
 
Infinity08Commented:
btw, is this the assignment you intended :

        htmlcontent = buf;

?? Or was it supposed to be the other way around ?
0
 
Infinity08Commented:
>> However, <title> is in the buf.

Oh, and notice that you're looking for "<TITLE>", not "<title>" - note the difference in case :)
0
 
akohanAuthor Commented:

I verify it by looking at htmcontent's contents, as I dump it I can see the <title> tag.
also, when I use %s I get NULL.

Thanks!



while((tmpres = recv(sock, buf, BUFSIZ, 0)) > 0){
          if(htmlstart == 0)
          {
            htmlcontent = strstr(buf, "\r\n\r\n");
            if(htmlcontent != NULL){
              htmlstart = 1;
              htmlcontent += 4;
            }
 
          }else{
 
            htmlcontent = buf;
            printf("\n\n\n\n***********************\n");
            char* needle = "<TITLE>";
            char* heystack = buf;
 
            printf(">>>The first character found: %s", strstr(heystack, needle));
            printf("\n***********************\n");
          }
 
          if(htmlstart){
            fprintf(stdout, htmlcontent);
          }

Open in new window

0
 
Infinity08Commented:
>> as I dump it I can see the <title> tag.

"<title>" or "<TITLE>" ? They're not the same.
0
 
akohanAuthor Commented:

I tried both TITLE and title but got the same result. however, that's my other question should I use isupper()? but as far as I remember that is for character not string!
0
 
akohanAuthor Commented:

Hi Infinity08,

I found I had put the code in a wrong block (since I'm using a loop) so I was missing the first segment of the retrieved html body finally got it by moving it to the right section of the code.

Thanks!
ak
0
 
akohanAuthor Commented:

Best C programming adviser ever!
0
 
geoffffCommented:
Your code

Open in new window

    if(htmlstart){

Open in new window

      fprintf(stdout, htmlcontent);

Open in new window

    }

Open in new window


Open in new window

can crash if the html content has any "%" characters in it.  This works instead:

Open in new window

    if(htmlstart){

Open in new window

      fprintf(stdout, "%s", htmlcontent);

Open in new window

    }

Open in new window


Open in new window

0
All Courses

From novice to tech pro — start learning today.