![]() |
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 |
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. |
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 |
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 |
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.