Solved

how to use strstr?

Posted on 2008-10-09
14
1,292 Views
Last Modified: 2012-05-05
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

0
Comment
Question by:akohan
14 Comments
 
LVL 53

Expert Comment

by:Infinity08
Comment Utility
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
 
LVL 17

Expert Comment

by:sweetfa2
Comment Utility
Is your heystack null terminated?
0
 

Author Comment

by:akohan
Comment Utility

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
 

Author Comment

by:akohan
Comment Utility

heystack is a char*

0
 
LVL 53

Expert Comment

by:Infinity08
Comment Utility
>> 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
 
LVL 53

Expert Comment

by:Infinity08
Comment Utility
btw, is this the assignment you intended :

        htmlcontent = buf;

?? Or was it supposed to be the other way around ?
0
 
LVL 53

Expert Comment

by:Infinity08
Comment Utility
>> However, <title> is in the buf.

Oh, and notice that you're looking for "<TITLE>", not "<title>" - note the difference in case :)
0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 

Author Comment

by:akohan
Comment Utility

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
 
LVL 53

Expert Comment

by:Infinity08
Comment Utility
>> as I dump it I can see the <title> tag.

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

Author Comment

by:akohan
Comment Utility

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
 
LVL 53

Accepted Solution

by:
Infinity08 earned 125 total points
Comment Utility
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
 

Author Comment

by:akohan
Comment Utility

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
 

Author Closing Comment

by:akohan
Comment Utility

Best C programming adviser ever!
0
 

Expert Comment

by:geoffff
Comment Utility
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

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Summary: This tutorial covers some basics of pointer, pointer arithmetic and function pointer. What is a pointer: A pointer is a variable which holds an address. This address might be address of another variable/address of devices/address of fu…
This is a short and sweet, but (hopefully) to the point article. There seems to be some fundamental misunderstanding about the function prototype for the "main" function in C and C++, more specifically what type this function should return. I see so…
The goal of this video is to provide viewers with basic examples to understand recursion in the C programming language.
The goal of this video is to provide viewers with basic examples to understand opening and reading files in the C programming language.

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now