strstr and const problem

  • Follow


I am trying to use the strstr function but it doesn't seem to work with a 
dynamically allocated string that I pass into a function.

Specifically, I am using a Macromedia C-level extensibility and the 
JavaScript interpreter to write an extension.

http://livedocs.macromedia.com/dreamweaver/8/extending/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=22_c_le2.htm#wp80297

http://livedocs.macromedia.com/dreamweaver/8/extending/wwhelp/wwhimpl/js/html/wwhelp.htm


While the example in the link above doesn't input 2 strings for me to do a 
strstr function, my custom function does.

So something like this seem to work:

    char const *stringBIG, *strSUB;
    char *stringBIGIndex;
    stringBIGIndex= strstr("this is a test", "test"); // this is a const and 
it works

HOWEVER, this doesn't seem to work:

    char const *stringBIG, *strSUB;
    char *stringBIGIndex;
    unsigned int strSUBlen, stringBIGlen;

    // Convert the stringBIG to a string
    stringBIG = JS_ValueToString(cx, argv[0], &stringBIGlen);

    strSUB= JS_ValueToString(cx, argv[1], &strSUBlen);

    stringBIGIndex= strstr(*stringBIG , *strSUB);


So, if you have a spelled out hard coded constant string, like  "this is a 
test", it works. But if I want to pass a string dynamically in, convert it 
and use the strstr function it doesn't.

I also tried declaring the line
    char const *stringBIG, *strSUB;

previously without the const keyword
    char *stringBIG, *strSUB;

And that didn't seem to work originally, so I added the const in there. 
Still no success.

I am trying to use the <string.h> library but I can't seem to use it in 
practical manner.


Thanks.










0
Reply rhinohat (7) 6/6/2006 3:54:56 PM

smnoff said:

<snip>

>     char const *stringBIG, *strSUB;

<snip>
 
>     stringBIGIndex= strstr(*stringBIG , *strSUB);

strstr takes const char *, not const char. If stringBIG and strSUB are 
pointing to valid strings, then you just need to do this:

    stringBIGIndex= strstr(stringBIG , strSUB);

-- 
Richard Heathfield
"Usenet is a strange place" - dmr 29/7/1999
http://www.cpax.org.uk
email: rjh at above domain (but drop the www, obviously)
0
Reply invalid171 (6555) 6/6/2006 4:11:40 PM


smnoff wrote:
> I am trying to use the strstr function but it doesn't seem to work with a 
> dynamically allocated string that I pass into a function.
> 
> Specifically, I am using a Macromedia C-level extensibility and the 
> JavaScript interpreter to write an extension.
> 
> http://livedocs.macromedia.com/dreamweaver/8/extending/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=22_c_le2.htm#wp80297
> 
> http://livedocs.macromedia.com/dreamweaver/8/extending/wwhelp/wwhimpl/js/html/wwhelp.htm
> 
> 
> While the example in the link above doesn't input 2 strings for me to do a 
> strstr function, my custom function does.
> 
> So something like this seem to work:
> 
>     char const *stringBIG, *strSUB;
>     char *stringBIGIndex;
>     stringBIGIndex= strstr("this is a test", "test"); // this is a const and 
> it works
> 
> HOWEVER, this doesn't seem to work:
> 
>     char const *stringBIG, *strSUB;
>     char *stringBIGIndex;
>     unsigned int strSUBlen, stringBIGlen;
> 
>     // Convert the stringBIG to a string
>     stringBIG = JS_ValueToString(cx, argv[0], &stringBIGlen);
> 
>     strSUB= JS_ValueToString(cx, argv[1], &strSUBlen);
> 
>     stringBIGIndex= strstr(*stringBIG , *strSUB);

Should be:
    stringBIGIndex = strstr(stringBIG, strSUB);

Robert
> 
> 
> So, if you have a spelled out hard coded constant string, like  "this is a 
> test", it works. But if I want to pass a string dynamically in, convert it 
> and use the strstr function it doesn't.
> 
> I also tried declaring the line
>     char const *stringBIG, *strSUB;
> 
> previously without the const keyword
>     char *stringBIG, *strSUB;
> 
> And that didn't seem to work originally, so I added the const in there. 
> Still no success.
> 
> I am trying to use the <string.h> library but I can't seem to use it in 
> practical manner.
> 
> 
> Thanks.
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
0
Reply robert.f.harris (386) 6/6/2006 4:14:44 PM

It worked when I didn't include the * in strstr as you recommended. Thanks.

Now, I am trying to understand why it worked. I guess when I used the line:

    stringBIGIndex= strstr(*stringBIG , *strSUB);

I was already dereferencing to the value? As opposed to just sticking in a 
auto allocated variable name?

I guess when I declared this line
    char const *stringBIG, *strSUB;

I don't have to separately declare:

    char const stringBIG, strSUB; // no * pointer here and because of the 
first one above, why?

I know it does it, but don't know how and why it does it.

Can someone please explain?



"Richard Heathfield" <invalid@invalid.invalid> wrote in message 
news:OPOdnVXNXpuTNBjZRVny2w@bt.com...
> smnoff said:
>
> <snip>
>
>>     char const *stringBIG, *strSUB;
>
> <snip>
>
>>     stringBIGIndex= strstr(*stringBIG , *strSUB);
>
> strstr takes const char *, not const char. If stringBIG and strSUB are
> pointing to valid strings, then you just need to do this:
>
>    stringBIGIndex= strstr(stringBIG , strSUB);
>
> -- 
> Richard Heathfield
> "Usenet is a strange place" - dmr 29/7/1999
> http://www.cpax.org.uk
> email: rjh at above domain (but drop the www, obviously) 


0
Reply rhinohat (7) 6/6/2006 6:46:52 PM

On Tue, 6 Jun 2006 10:54:56 -0500, "smnoff" <rhinohat@hotmail.com>
wrote:

>I am trying to use the strstr function but it doesn't seem to work with a 
>dynamically allocated string that I pass into a function.
>
>Specifically, I am using a Macromedia C-level extensibility and the 
>JavaScript interpreter to write an extension.
>
>http://livedocs.macromedia.com/dreamweaver/8/extending/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=22_c_le2.htm#wp80297
>
>http://livedocs.macromedia.com/dreamweaver/8/extending/wwhelp/wwhimpl/js/html/wwhelp.htm
>
>
>While the example in the link above doesn't input 2 strings for me to do a 
>strstr function, my custom function does.
>
>So something like this seem to work:
>
>    char const *stringBIG, *strSUB;
>    char *stringBIGIndex;
>    stringBIGIndex= strstr("this is a test", "test"); // this is a const and 
>it works

it seems to me str* name are reserved for the compiler
so the above is wrong
0
Reply av 6/7/2006 5:22:36 AM

4 Replies
43 Views

(page loaded in 0.15 seconds)

Similiar Articles:







7/7/2012 10:36:26 PM


Reply: