www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2001/09/29/02:34:44

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: <vhpart0gjqnr7u2tf0ih8hdf18mlkj11br@4ax.com>
References: <lcq8rtk1nqua2hc6rqfhmqisbd587n8t2n AT 4ax DOT com> <Xns912A8823C1399ASINANUNUR AT 132 DOT 236 DOT 56 DOT 8> <3BB50884 DOT 347A4384 AT yahoo DOT com> <hmjart4m6h7tt0vddvvg47438dijr428ob AT 4ax DOT com> <3BB55487 DOT CC4407ED AT worldnet DOT att DOT net>
X-Newsreader: Forte Agent 1.8/32.548
MIME-Version: 1.0
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
<lcargill AT worldnet DOT att DOT net> 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 <cbfalconer AT yahoo DOT com>
>> 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 <string.h>
>> >> #include <stdlib.h>
>> >> #include <stdio.h>
>> >>
>> >> 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 :-)

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019