www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2001/09/28/13:34:18

From: "A. Sinan Unur" <asu1 AT cornell DOT edu>
Newsgroups: comp.os.msdos.djgpp
Subject: Re: Please add strrev proposal
Date: 28 Sep 2001 17:23:00 GMT
Organization: Cornell University
Lines: 69
Sender: asu1 AT cornell DOT invalid (on 128.253.251.163)
Message-ID: <Xns912A8823C1399ASINANUNUR@132.236.56.8>
References: <lcq8rtk1nqua2hc6rqfhmqisbd587n8t2n AT 4ax DOT com>
NNTP-Posting-Host: 128.253.251.163
X-Trace: news01.cit.cornell.edu 1001697780 22587 128.253.251.163 (28 Sep 2001 17:23:00 GMT)
X-Complaints-To: usenet AT news01 DOT cit DOT cornell DOT edu
NNTP-Posting-Date: 28 Sep 2001 17:23:00 GMT
User-Agent: Xnews/4.06.22
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

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

Now, think about that.	
-- 
--------------------------------
A. Sinan Unur
http://www.unur.com/

- Raw text -


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