[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ruby-talk
Subject:    Re: why won't ruby chomp for me?
From:       Sam Roberts <sroberts () uniserve ! com>
Date:       2004-01-29 16:12:30
Message-ID: 20040129161222.GD1682 () ensemble ! local ! 
[Download RAW message or body]

Quoteing steven.jenkins@ieee.org, on Fri, Jan 30, 2004 at 12:47:49AM +0900:
> ts wrote:
> > Probably the good question is : what is a line ? do the "line" separator
> > belong to the line or not ?
> 
> I suppose any language can define it any way. But it seems clear that 
> much of the Ruby library is modeled after C and Unix (which are defined 
> by international standards). In ISO C, the newline is removed from the 
> string returned by gets().

> On the other hand, C doesn't let you redefine the input line separator. 

Modelled after, but supposed to be easier to use than C, and gets() is widely
considered to be a mistake by even C programmers.

The C IO library has some apis that strip newlines, and some that don't, and
its a common source of bugs and confusion, not profitably emulated.

For your amusement, here's some of the comments from the GNU C library docs:

Line-Oriented Input
===================

Since many programs interpret input on the basis of lines, it is
convenient to have functions to read a line of text from a stream.

   Standard C has functions to do this, but they aren't very safe: null
characters and even (for `gets') long lines can confuse them.  So the
GNU library provides the nonstandard `getline' function that makes it
easy to read lines reliably.

   Another GNU extension, `getdelim', generalizes `getline'.  It reads
a delimited record, defined as everything through the next occurrence
of a specified delimiter character.

....

 - Deprecated function: char * gets (char *S)
     The function `gets' reads characters from the stream `stdin' up to
     the next newline character, and stores them in the string S.  The
     newline character is discarded (note that this differs from the
     behavior of `fgets', which copies the newline character into the
     string).  If `gets' encounters a read error or end-of-file, it
     returns a null pointer; otherwise it returns S.

     *Warning:* The `gets' function is *very dangerous* because it
     provides no protection against overflowing the string S.  The GNU
     library includes it for compatibility only.  You should *always*
     use `fgets' or `getline' instead.  To remind you of this, the
     linker (if using GNU `ld') will issue a warning whenever you use
     `gets'.


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic