---
name: "gets"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/fgets"
---

# gets(3)

get a line from a stream

Part of [fgets(3)](/fgets/3.md).

## NAME

**fgets**, **gets\_s** – get a line from a stream

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<stdio.h\>**

*char* *\**\

**fgets**(*char \* restrict str*, *int size*, *FILE \* restrict stream*);

**#define \_\_STDC\_WANT\_LIB\_EXT1\_\_ 1**

*char* *\**\

**gets\_s**(*char \*str*, *rsize\_t size*);

## DESCRIPTION

The **fgets**() function reads at most one less than the number of characters specified by *size* from the given *stream* and stores them in the string *str*. Reading stops when a newline character is found, at end-of-file or error. The newline, if any, is retained. If any characters are read and there is no error, a ‘\\0’ character is appended to end the string.

The **gets\_s**() function is equivalent to **fgets**() with a *stream* of stdin, except that the newline character (if any) is not stored in the string.

The **gets**() function was unsafe and is no longer available.

## RETURN VALUES

Upon successful completion, **fgets**() and **gets\_s**() return a pointer to the string. If end-of-file occurs before any characters are read, they return NULL and the buffer contents remain unchanged. If an error occurs, they return NULL and the buffer contents are indeterminate. The **fgets**() and **gets\_s**() functions do not distinguish between end-of-file and error, and callers must use [feof(3)](/feof/3.md) and [ferror(3)](/ferror/3.md) to determine which occurred.

## ERRORS

- \[EBADF\]

  The given *stream* is not a readable stream.

The function **fgets**() may also fail and set *errno* for any of the errors specified for the routines [fflush(3)](/fflush/3.md), [fstat(2)](/fstat/2.md), [read(2)](/read/2.md), or [malloc(3)](/malloc/3.md).

The function **gets\_s**() may also fail and set *errno* for any of the errors specified for the routine [getchar(3)](/getchar/3.md).

## SEE ALSO

[feof(3)](/feof/3.md), [ferror(3)](/ferror/3.md), [fgetln(3)](/fgetln/3.md), [fgetws(3)](/fgetws/3.md), [getline(3)](/getline/3.md)

## STANDARDS

The **fgets**() function conforms to ISO/IEC 9899:1999 (“ISO C99”). **gets\_s**() conforms to ISO/IEC 9899:2011 (“ISO C11”) K.3.7.4.1. **gets**() has been removed from ISO/IEC 9899:2011 (“ISO C11”).

## HISTORY

The functions **fgets**() and **gets**() first appeared in Version 7 AT&T UNIX.
