Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

how to use strstr?

Posted on 2008-10-09
14
Medium Priority
?
1,303 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
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 

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 500 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

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

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

Windows programmers of the C/C++ variety, how many of you realise that since Window 9x Microsoft has been lying to you about what constitutes Unicode (http://en.wikipedia.org/wiki/Unicode)? They will have you believe that Unicode requires you to use…
Examines three attack vectors, specifically, the different types of malware used in malicious attacks, web application attacks, and finally, network based attacks.  Concludes by examining the means of securing and protecting critical systems and inf…
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use for-loops in the C programming language.
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use while-loops in the C programming language.

721 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