delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2001/09/29/11:34:19

From: Radical DOT NetSurfer AT delorie DOT com
Newsgroups: comp.os.msdos.djgpp
Subject: Re: Please add strrev proposal
Date: Sat, 29 Sep 2001 11:12:57 -0400
Organization: Posted via Supernews, http://www.supernews.com
Message-ID: <02pbrto99332j0s1mnkvhl4sts5828rqiu@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> <vhpart0gjqnr7u2tf0ih8hdf18mlkj11br AT 4ax DOT com> <9p4jri$q73$1 AT uranium DOT btinternet DOT com>
X-Newsreader: Forte Agent 1.8/32.548
MIME-Version: 1.0
X-Complaints-To: newsabuse AT supernews DOT com
Lines: 170
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

At the risk of being redundant:

<begin_being_redundant>
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,

{ there just is not any other way to say this more clearly }

[[snippity-snip]]

{ Print, }
Left to right, in the order AND STATE ENCOUNTERED!
{ values, values_to_functions }

....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.
<end_being_redundant>

{ and that will be all I will offer to this thread }

On Sat, 29 Sep 2001 14:52:36 +0100, "Tim Nicholson"
<T DOT J DOT Nicholson AT btinternet DOT com> wrote:

>If you think about it, it could not work any other way. The string only
>exists in one state or the other. (i.e. forward state or reverse state) It
>would therefore not be possible to pass both states to the printf() function
>as parameters in the same call. The only way your reasoning could work is if
>printf() were to call strref(str) having processed the first %s and, of
>cource, that is not how any function works.
>
>Tim
><Radical NetSurfer> wrote in message
>news:vhpart0gjqnr7u2tf0ih8hdf18mlkj11br AT 4ax 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