From: Radical DOT NetSurfer AT delorie DOT com Newsgroups: comp.os.msdos.djgpp Subject: Re: Please add strrev proposal Date: Sat, 29 Sep 2001 02:13:50 -0400 Organization: Posted via Supernews, http://www.supernews.com Message-ID: References: <3BB50884 DOT 347A4384 AT yahoo DOT com> <3BB55487 DOT CC4407ED AT worldnet DOT att DOT net> X-Newsreader: Forte Agent 1.8/32.548 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: newsabuse AT supernews DOT com Lines: 116 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com OUTCH! you believe this behavior is correct, too? OMG! ...and still no incorporation of strrev(NO_ARGS); psst: that returns the last static value of a func, in this case, whatever the last string that was "reversed" (and no, its not a C++ thingy either; but all this is another story) On Sat, 29 Sep 2001 04:54:12 GMT, Les Cargill wrote: >Radical, let us look at what is meant by the code snippet: >printf("Original String: %s\nReversed String:%s\n", s, strrev(s)); > > >First*, s is pushed on the stack, then "strrev" is called. >strrev reversed the original string in place. > >Next**, the pointer return from strrev, and s ( which *are the same value* ) >are both pushed on the stack > >Radical, NetSurfer wrote: >> >> On Sat, 29 Sep 2001 00:28:28 GMT, CBFalconer >> wrote: >> >> >"A. Sinan Unur" wrote: >> >> >> >> Radical NetSurfer wrote in >> >> news:lcq8rtk1nqua2hc6rqfhmqisbd587n8t2n AT 4ax DOT com: >> >> >> >> > I would like to encourage everyone who has a need for >> >> > strrev to come forward and encourage the maintainers of >> >> > LIBC used with GCC to kindly add strrev. >> >> >> >> Count me against this if for no other reason that the fact that I do not >> >> like extra nonstandard function which solve tiny problems. If you need the >> >> functionality, you can write one for your own situation. If it is going to >> >> be added to a library, the solution needs to be useful to more than just >> >> one person in a particular situation. >> >> >> >> Anyway, the main point of my post, however, is to point out just one of the >> >> gotchas with these kinds of functions. >> >> >> >> You give the following usage example: >> >> >> >> > Example >> >> > printf("The reverse of %s is %s\n", str, strrev(str) ); >> >> >> >> Hmmmmm ..... let us see using the code you suggested: >> >> >> >> /* +++Date last modified: 05-Jul-1997 */ >> >> /* >> >> ** STRREV.C - reverse a string in place >> >> ** >> >> ** public domain by Bob Stout >> >> */ >> >> >> >> #include >> >> #include >> >> #include >> >> >> >> char *strrev(char *str) { >> >> char *p1, *p2; >> >> >> >> if (! str || ! *str) return str; >> >> for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2) >> >> { >> >> *p1 ^= *p2; >> >> *p2 ^= *p1; >> >> *p1 ^= *p2; >> >> } >> >> return str; >> >> } >> >> >> >> int main(void) >> >> { >> >> char s[] = "This is a test."; >> >> printf("Original String: %s\nReversed String:%s\n", s, strrev(s)); >> >> return 0; >> >> } >> >> >> >> C:\var>gcc djstrrev.c -o djstrrev.exe -O2 -Wall >> >> >> >> C:\var>djstrrev >> >> Original String: .tset a si sihT >> >> Reversed String: .tset a si sihT >> >> If your compiler actually outputs both strings as reversed, >> THEN I am very scared your compiler is quite BROKEN. >> >> printf("format specifier1, format_specififer2", var1, func1); >> >> does: >> display __current__ value of var1 FIRST using format_specifier1, >> __THEN__ >> display __output__ of funct1 using format_specifier2, >> >> If DJGPP is not doing even this trivial behavior correctly, >> Borland programs would never port correctly, >> neither would anything else for that matter. >> >> Left to right, in the order AND STATE ENCOUNTERED! >> >> ....however... __AFTER__ the call to printf(), __THEN__ >> 'str' will contain the result of the function call; >> but __NEVER__ from __WITHIN__ the printf as >> you implied. Your post is VERY MISLEADING. >> >> >> Now, think about that. >> > >> >Thank you. I knew there was a reason I made my equivalent >> >(revstring) a void function. I just didn't know what it was :-)