Skip to content
instance method

StringIO#getc

() -> ::String?
getc → character, byte, or nil

Reads and returns the next character (or byte; see below) from the stream:

Example
strio = StringIO.new('foo')
strio.getc # => "f"
strio.getc # => "o"
strio.getc # => "o"

Returns nil if at end-of-stream:

Example
strio.eof? # => true
strio.getc # => nil

Returns characters, not bytes:

Example
strio = StringIO.new('Привет')
strio.getc # => "П"
strio.getc # => "р"

strio = StringIO.new('こんにちは')
strio.getc # => "こ"
strio.getc # => "ん"

In each of the examples above, the stream is positioned at the beginning of a character; in other cases that need not be true:

Example
strio = StringIO.new('こんにちは')  # Five 3-byte characters.
strio.pos = 3 # => 3     # At beginning of second character; returns character.
strio.getc    # => "ん"
strio.pos = 4 # => 4     # At second byte of second character; returns byte.
strio.getc    # => "\x82"
strio.pos = 5 # => 5     # At third byte of second character; returns byte.
strio.getc    # => "\x93"

Related: getbyte, putc, ungetc.

See also #getbyte #gets #fsync #internal_encoding also in 4.1 · 3.4 · 3.3 · 3.2 · 3.1 · 3.0