Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Mar 2009 21:42:15 -0700
From:      Gary Kline <kline@thought.org>
To:        Josh Carroll <josh.carroll@gmail.com>
Cc:        FreeBSD Mailing List <freebsd-questions@freebsd.org>
Subject:   Re: Why?? (prog question)
Message-ID:  <20090331044214.GA11129@thought.org>
In-Reply-To: <8cb6106e0903302008j5ab06a97odbd32fb68c1a404d@mail.gmail.com>
References:  <20090331025726.GA10888@thought.org> <8cb6106e0903302008j5ab06a97odbd32fb68c1a404d@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Mar 30, 2009 at 11:08:57PM -0400, Josh Carroll wrote:
> On Mon, Mar 30, 2009 at 10:57 PM, Gary Kline <kline@thought.org> wrote:
> > people, i've been under the weather for days and will probably be for a few more.
> > new  and TEMPORARY meds dont like me, ugh.
> >
> > can anybody clue me in why the followin joinline program fails to catch if argc == 1?
> >
> >
> > /*
> >  * simple prog to join all | very nearly all lines of a text file that
> >  * make up one paragraph into one LONG line.
> >  *
> >  * paragraphs are delimiated by a single \n break.
> >  */
> >
> > #include <stdio.h>
> > #include <string.h>
> > #include <stdlib.h>
> >
> > main(int argc, char argv[])
> > {
> >   char buf[65536];
> >
> >   if (argc == 1)
> >   {
> >        printf("Usage: %s < file > newfile\n", argv[0]);
> >        exit (-1);
> >   }
> >   while (fgets(buf, sizeof buf, stdin) )
> >   {
> >     if (*buf == '\n')
> >     {
> >       fprintf(stdout, "\n\n");
> >     }
> >     else
> >     {
> >       buf[strlen(buf)-1] = ' ';
> >       fputs(buf, stdout);
> >     }
> >   }
> > }
> 
> main should be:
> 
> int main(int argc, char **argv)
> 
> or perhaps
> 
> int main(int argc, char *argv[])
> 
> As is, you're defining int as   char argv[]  (e.g. char *) instead of char **.
> 
> What will likely happen is you'll get a segmentation fault when you
> try to run the program, since your printf format spec has %s, but
> you're passing it a char.
> 
> In fact, if you compile it with -Wall, you'll see the two problems
> I've mentioned:
> 
> t.c:13: warning: second argument of 'main' should be 'char **'
> t.c: In function 'main':
> t.c:20: warning: format '%s' expects type 'char *', but argument 2 has
> type 'int'
> 
> Change char argv[] to char *argv[] or char **argv and it should work properly.
> 
> Note also that your main should have an int return type and should
> return a value.
> 
> Regards,
> Josh




	you got it; as far as i know this is the first time that i've ever done the 
	"char argv[]" instead of the "char *argv[]".

	thanks!

	gary
	:x

> _______________________________________________
> freebsd-questions@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "freebsd-questions-unsubscribe@freebsd.org"

-- 
 Gary Kline  kline@thought.org  http://www.thought.org  Public Service Unix
        http://jottings.thought.org   http://transfinite.thought.org
    The 2.41a release of Jottings: http://jottings.thought.org/index.php




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090331044214.GA11129>