strstr and const problem

S

smnoff

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/drea...text=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.
 
R

Richard Heathfield

smnoff said:

char const *stringBIG, *strSUB;

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);
 
R

Robert Harris

smnoff said:
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/drea...text=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
 
S

smnoff

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?
 
A

av

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/drea...text=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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,767
Messages
2,569,572
Members
45,045
Latest member
DRCM

Latest Threads

Top