By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
457,939 Members | 1,541 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 457,939 IT Pros & Developers. It's quick & easy.

strstr and const problem

P: n/a
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/dream...e2.htm#wp80297

http://livedocs.macromedia.com/dream...tml/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.




Jun 6 '06 #1
Share this Question
Share on Google+
4 Replies


P: n/a
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)
Jun 6 '06 #2

P: n/a
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/dream...e2.htm#wp80297

http://livedocs.macromedia.com/dream...tml/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.



Jun 6 '06 #3

P: n/a
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" <in*****@invalid.invalid> wrote in message
news:OP********************@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)

Jun 6 '06 #4

P: n/a
av
On Tue, 6 Jun 2006 10:54:56 -0500, "smnoff" <rh******@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/dream...e2.htm#wp80297

http://livedocs.macromedia.com/dream...tml/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
Jun 7 '06 #5

This discussion thread is closed

Replies have been disabled for this discussion.