Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1304
  • Last Modified:

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

0
akohan
Asked:
akohan
1 Solution
 
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
 
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
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
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
 
Infinity08Commented:
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
 
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

Featured Post

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now