Solved

how to use strstr?

Posted on 2008-10-09
14
1,298 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
14 Comments
 
LVL 53

Expert Comment

by:Infinity08
ID: 22682322
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
ID: 22682324
Is your heystack null terminated?
0
 

Author Comment

by:akohan
ID: 22682357

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
[Live Webinar] The Cloud Skills Gap

As Cloud technologies come of age, business leaders grapple with the impact it has on their team's skills and the gap associated with the use of a cloud platform.

Join experts from 451 Research and Concerto Cloud Services on July 27th where we will examine fact and fiction.

 

Author Comment

by:akohan
ID: 22682360

heystack is a char*

0
 
LVL 53

Expert Comment

by:Infinity08
ID: 22682368
>> 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
ID: 22682384
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
ID: 22682407
>> However, <title> is in the buf.

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

Author Comment

by:akohan
ID: 22682449

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
ID: 22682474
>> as I dump it I can see the <title> tag.

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

Author Comment

by:akohan
ID: 22682481

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
ID: 22682502
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
ID: 22683195

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
ID: 31504829

Best C programming adviser ever!
0
 

Expert Comment

by:geoffff
ID: 24446678
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

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Preface I don't like visual development tools that are supposed to write a program for me. Even if it is Xcode and I can use Interface Builder. Yes, it is a perfect tool and has helped me a lot, mainly, in the beginning, when my programs were small…
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 and use structures in the C programming language.
The goal of this video is to provide viewers with basic examples to understand recursion in the C programming language.

628 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