Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C++ (http://www.velocityreviews.com/forums/f39-c.html)
-   -   What is valid std::strstr()'s signature? (http://www.velocityreviews.com/forums/t754961-what-is-valid-std-strstr-s-signature.html)

Alex Vinokur 10-17-2011 10:50 AM

What is valid std::strstr()'s signature?
 
Hi,

What is valid std::strstr()'s signature?


http://www.cplusplus.com/reference/c...string/strstr/
const char * strstr ( const char * str1, const char * str2 );
char * strstr ( char * str1, const char * str2 );



HP-UX B.11.23 U ia64
/usr/include/string.h: extern char *strstr(const char *, const
char *);


Linux 2.6.18-238.1.1.el5
/usr/include/string.h:extern char *strstr (__const char *__haystack,
__const char *__needle)


Thanks,

Alex

Nobody 10-17-2011 12:52 PM

Re: What is valid std::strstr()'s signature?
 
On Mon, 17 Oct 2011 03:50:59 -0700, Alex Vinokur wrote:

> What is valid std::strstr()'s signature?


This (21.7p7):

> const char * strstr ( const char * str1, const char * str2 );
> char * strstr ( char * str1, const char * str2 );


> HP-UX B.11.23 U ia64
> /usr/include/string.h:


This is the ISO C definition:

> extern char *strstr(const char *, const char *);


C doesn't have overloaded functions, so there can only be a single
prototype. The strstr() function doesn't modify either string (hence the
"const" on the argument types), but the return value (if not NULL) is a
pointer into the target string specified by the first argument.

If the target string can safely be modified, then it's safe to modify it
via the returned pointer (hence no "const" on the return type). If the
target string should not be modified, then it's not safe to modify it via
the returned pointer either. The C++ definition uses overloading to encode
these rules.


Alex Vinokur 10-17-2011 01:20 PM

Re: What is valid std::strstr()'s signature?
 
On Oct 17, 2:52*pm, Nobody <nob...@nowhere.com> wrote:
> On Mon, 17 Oct 2011 03:50:59 -0700, Alex Vinokur wrote:
> > What is valid std::strstr()'s signature?

>
> This (21.7p7):
>
> > const char * strstr ( const char * str1, const char * str2 );
> > * * * char * strstr ( * * * char * str1, const char * str2 );
> > HP-UX B.11.23 U ia64
> > /usr/include/string.h:

>
> This is the ISO C definition:
>
> > extern char *strstr(const char *, const char *);

>
> C doesn't have overloaded functions, so there can only be a single
> prototype. *The strstr() function doesn't modify either string (hence the
> "const" on the argument types), but the return value (if not NULL) is a
> pointer into the target string specified by the first argument.
>
> If the target string can safely be modified, then it's safe to modify it
> via the returned pointer (hence no "const" on the return type). If the
> target string should not be modified, then it's not safe to modify it via
> the returned pointer either. The C++ definition uses overloading to encode
> these rules.


Thanks.
But where are C++-strstr()'s declared?
string.h contains the only strstr() declaration.

Alex

Victor Bazarov 10-17-2011 02:34 PM

Re: What is valid std::strstr()'s signature?
 
On 10/17/2011 9:20 AM, Alex Vinokur wrote:
> On Oct 17, 2:52 pm, Nobody<nob...@nowhere.com> wrote:
>> On Mon, 17 Oct 2011 03:50:59 -0700, Alex Vinokur wrote:
>>> What is valid std::strstr()'s signature?

>>
>> This (21.7p7):
>>
>>> const char * strstr ( const char * str1, const char * str2 );
>>> char * strstr ( char * str1, const char * str2 );
>>> HP-UX B.11.23 U ia64
>>> /usr/include/string.h:

>>
>> This is the ISO C definition:
>>
>>> extern char *strstr(const char *, const char *);

>>
>> C doesn't have overloaded functions, so there can only be a single
>> prototype. The strstr() function doesn't modify either string (hence the
>> "const" on the argument types), but the return value (if not NULL) is a
>> pointer into the target string specified by the first argument.
>>
>> If the target string can safely be modified, then it's safe to modify it
>> via the returned pointer (hence no "const" on the return type). If the
>> target string should not be modified, then it's not safe to modify it via
>> the returned pointer either. The C++ definition uses overloading to encode
>> these rules.

>
> Thanks.
> But where are C++-strstr()'s declared?
> string.h contains the only strstr() declaration.


In <cstdlib>. See Standard, [lib.c.strings]/10.

V
--
I do not respond to top-posted replies, please don't ask

Marc 10-17-2011 04:23 PM

Re: What is valid std::strstr()'s signature?
 
Alex Vinokur wrote:

> What is valid std::strstr()'s signature?
> const char * strstr ( const char * str1, const char * str2 );
> char * strstr ( char * str1, const char * str2 );


The two above are the correct ones.

> Linux 2.6.18-238.1.1.el5
> /usr/include/string.h:extern char *strstr (__const char *__haystack,
> __const char *__needle)


That's ancient, recent glibc has the correct declarations (and solaris
has had them for a very long time).


All times are GMT. The time now is 01:43 PM.

Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57