Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | Stephen Sprunk <stephen@sprunk.org> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: Params -> local vars? |
| Date | 2012-07-30 15:09 -0500 |
| Organization | A noiseless patient Spider |
| Message-ID | <jv6pl1$p6$1@dont-email.me> (permalink) |
| References | <jv6nmr$15k$1@speranza.aioe.org> |
On 30-Jul-12 14:35, Jon Howson wrote:
> I was reading thru some (yellowing!) mimeographed introductory notes on C
> and I found code like the below.
>
> main(argc,argv)
> int argc;
> char *argv[];
> {
> char *malloc();
> char *strcpy();
> int puts();
> void free();
>
> char *s;
> if(argc>1 &&(s=malloc(8+strlen(argv[1])))){
> strcpy(s,"Hello, ");
> strcpy(s+7,argv[1]);
> puts(s);
> free(s);
> }else{
> puts("Program failed, unknown error");
> }
> }
>
> I'm trying to work out what's happening. At the start of the function, I
> guess the parameters are being converted into local variables, maybe a
> way to get pass-by-value in C?
>
> Also what is the advantage of declaring the string and memory functions
> locally to the function?
This is K&R C, which had a different syntax for arguments and no
standard headers. To restate it in ANSI C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *s;
if (argc>1 && (s = malloc(strlen(argv[1]) + 8))) {
strcpy(s, "Hello, ");
strcpy(s+7, argv[1]);
puts(s);
free(s);
} else {
puts("Program failed, unknown error");
}
}
A modern coder would just use printf(), but perhaps that hadn't been
taught yet or would have obscured what the text was trying to teach
about string manipulation--or printf() was considered excessive for such
a trivial task on the day's limited machines.
Unless you're interested in software archaeology, I would recommend you
discard any text that uses K&R C, which has been obsolete since ANSI C
was published in 1989.
S
--
Stephen Sprunk "God does not play dice." --Albert Einstein
CCIE #3723 "God is an inveterate gambler, and He throws the
K5SSS dice at every possible opportunity." --Stephen Hawking
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Params -> local vars? Jon Howson <nospam@nospam.com> - 2012-07-30 19:35 +0000
Re: Params -> local vars? Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-07-30 15:54 -0400
Re: Params -> local vars? James Kuyper <jameskuyper@verizon.net> - 2012-07-30 16:00 -0400
Re: Params -> local vars? Kenneth Brody <kenbrody@spamcop.net> - 2012-07-30 16:01 -0400
Re: Params -> local vars? Stephen Sprunk <stephen@sprunk.org> - 2012-07-30 15:09 -0500
Re: Params -> local vars? Mark Bluemel <mark_bluemel@pobox.com> - 2012-07-31 08:34 +0100
Re: Params -> local vars? Kleuske <kleuske@nowhere.net> - 2012-07-31 19:29 +0000
Re: Params -> local vars? Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-07-31 15:51 -0400
Re: Params -> local vars? Kenneth Brody <kenbrody@spamcop.net> - 2012-08-01 15:58 -0400
Re: Params -> local vars? Keith Thompson <kst-u@mib.org> - 2012-07-30 13:49 -0700
Re: Params -> local vars? Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2012-07-30 21:56 -0600
Re: Params -> local vars? David T. Ashley <dashley@gmail.com> - 2012-07-31 08:42 -0400
Re: Params -> local vars? Tim Rentsch <txr@alumni.caltech.edu> - 2012-09-07 13:39 -0700
Re: Params -> local vars? Keith Thompson <kst-u@mib.org> - 2012-09-07 17:55 -0700
Re: Params -> local vars? Tim Rentsch <txr@alumni.caltech.edu> - 2012-09-08 05:09 -0700
Re: Params -> local vars? Keith Thompson <kst-u@mib.org> - 2012-09-08 11:14 -0700
Re: Params -> local vars? Richard Damon <news.x.richarddamon@xoxy.net> - 2012-09-08 16:43 -0400
Re: Params -> local vars? Tim Rentsch <txr@alumni.caltech.edu> - 2012-12-17 14:13 -0800
csiph-web