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

# iscntrl(3)

control character test

## NAME

**iscntrl**, **iscntrl\_l** – control character test

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

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

*int*\

**iscntrl**(*int c*);

*int*\

**iscntrl\_l**(*int c*, *locale\_t loc*);

## DESCRIPTION

The **iscntrl**() and **iscntrl\_l**() functions test for any control character. The value of the argument must be representable as an *unsigned char* or the value of EOF.

In the ASCII character set, this includes the following characters (with their numeric values shown in octal):

| | | | | |
| --- | --- | --- | --- | --- |
| 000 NUL | 001 SOH | 002 STX | 003 ETX | 004 EOT |
| 005 ENQ | 006 ACK | 007 BEL | 010 BS | 011 HT |
| 012 NL | 013 VT | 014 NP | 015 CR | 016 SO |
| 017 SI | 020 DLE | 021 DC1 | 022 DC2 | 023 DC3 |
| 024 DC4 | 025 NAK | 026 SYN | 027 ETB | 030 CAN |
| 031 EM | 032 SUB | 033 ESC | 034 FS | 035 GS |
| 036 RS | 037 US | 177 DEL |  |  |

The **iscntrl\_l**() function takes an explicit locale argument, whereas the **iscntrl**() function uses the current global or per-thread locale.

## RETURN VALUES

The **iscntrl**() and **iscntrl\_l**() functions return zero if the character tests false and return non-zero if the character tests true.

## COMPATIBILITY

The 4.4BSD extension of accepting arguments outside of the range of the *unsigned char* type in locales with large character sets is considered obsolete and may not be supported in future releases. The **iswcntrl**() or **iswcntrl\_l**() function should be used instead.

## SEE ALSO

[ctype(3)](/ctype/3.md), [ctype\_l(3)](/ctype_l/3.md), [iswcntrl(3)](/iswcntrl/3.md), [iswcntrl\_l(3)](/iswcntrl_l/3.md), [xlocale(3)](/xlocale/3.md), [ascii(7)](/ascii/7.md)

## STANDARDS

The **iscntrl**() function conforms to ISO/IEC 9899:1990 (“ISO C90”). The **iscntrl\_l**() function conforms to IEEE Std 1003.1-2008 (“POSIX.1”).

## HISTORY

The **iscntrl**() function first appeared in Version 7 AT&T UNIX.
