std::iscntrl(3)
β¨ std::iscntrl(3) β C++ Standard Library β¨
Bestie, welcome to the std::iscntrl(3) page from the C++ Standard Library. We're about to vibe-check control characters together, and honestly? It's giving iconic. π«Ά
π NAME π
std::iscntrl - std::iscntrl
That's it. That's the name. Minimalist icon behavior. π
πΈ Synopsis πΈ
Defined in header <cctype>
int iscntrl( int ch );
Okay so std::iscntrl checks if the given character is a control character as classified by the currently installed C locale. In the default, "C" locale, the control characters are the characters with the codes 0x00-0x1F and 0x7F. π
β οΈ Undefined behavior alert: The behavior is undefined if the value ofchis not representable asunsigned charand is not equal toEOF. Periodt. Don't do it. π
π¦ Parameters π¦
chβ character to classify
π Return value π
Non-zero value if the character is a control character, zero otherwise. That's the whole vibe check, bestie. β¨
π Notes π
Like all other functions from <cctype>, the behavior of std::iscntrl is undefined if the argument's value is neither representable as unsigned char nor equal to EOF. To use these functions safely with plain chars (or signed chars), the argument should first be converted to unsigned char:
bool my_iscntrl(char ch)
{
return std::iscntrl(static_cast<unsigned char>(ch));
}
Similarly, they should not be directly used with standard algorithms when the iterator's value type is char or signed char. Instead, convert the value to unsigned char first:
int count_cntrls(const std::string& s)
{
return std::count_if(s.begin(), s.end(),
// static_cast<int(*)(int)>(std::iscntrl)
// wrong
// [](int c){ return std::iscntrl(c); }
// wrong
// [](char c){ return std::iscntrl(c); }
// wrong
[](unsigned char c){ return std::iscntrl(c); }
// correct
);
}
Lowkey the casts are the whole plot, bestie. Don't skip them. π§
π Example π
// Run this code
#include <cctype>
#include <clocale>
#include <iostream>
int main()
{
unsigned char c = '\x94'; // the control code CCH in ISO-8859-1
std::cout << "iscntrl(\'\\x94\', default C locale) returned "
<< std::boolalpha << !!std::iscntrl(c) << '\n';
std::setlocale(LC_ALL, "en_GB.iso88591");
std::cout << "iscntrl(\'\\x94\', ISO-8859-1 locale) returned "
<< !!std::iscntrl(c) << '\n';
}
β Possible output β
iscntrl('\x94', default C locale) returned false
iscntrl('\x94', ISO-8859-1 locale) returned true
π See also π
iscntrl(std::locale)β checks if a character is classified as a control character by a locale (function template)iswcntrlβ checks if a wide character is a control character (function)- C documentation for
iscntrlβ the C version, for when you're feeling vintage
π ASCII values chart π
Also, here's the iconic ASCII values chart, because we love a comprehensive vibe check. π I split it into two blocks so your terminal doesn't have to scroll sideways into next week. You're welcome. π¦
Narrow crew:
decimal hexadecimal octal characters iscntrl isprint isspace isblank isgraph ispunct isalnum isalpha isupper islower isdigit isxdigit
0β8 \x0β\x8 \0β\10 control codes (NUL, etc.) β 0 0 0 0 0 0 0 0 0 0 0 0
9 \x9 \11 tab (\t) β 0 0 β 0 β 0 0 0 0 0 0 0 0 0
10β13 \xAβ\xD \12β\15 whitespaces (\n, \v, \f, \r) β 0 0 β 0 0 0 0 0 0 0 0 0 0
14β31 \xEβ\x1F \16β\37 control codes β 0 0 0 0 0 0 0 0 0 0 0 0
32 \x20 \40 space 0 β 0 β 0 β 0 0 0 0 0 0 0 0 0
33β47 \x21β\x2F \41β\57 !"#$%&'()*+,-./ 0 β 0 0 0 β 0 β 0 0 0 0 0 0 0
48β57 \x30β\x39 \60β\71 0123456789 0 β 0 0 0 β 0 0 β 0 0 0 0 β 0 β 0
58β64 \x3Aβ\x40 \72β\100 :;<=>?@ 0 β 0 0 0 β 0 β 0 0 0 0 0 0 0
65β70 \x41β\x46 \101β\106 ABCDEF 0 β 0 0 0 β 0 0 β 0 β 0 β 0 0 0 β 0
71β90 \x47β\x5A \107β\132 GHIJKLMNOPQRSTUVWXYZ 0 β 0 0 0 β 0 0 β 0 β 0 β 0 0 0 0
91β96 \x5Bβ\x60 \133β\140 [\]^_` 0 β 0 0 0 β 0 β 0 0 0 0 0 0 0
97β102 \x61β\x66 \141β\146 abcdef 0 β 0 0 0 β 0 0 β 0 β 0 0 β 0 0 β 0
103β122 \x67β\x7A \147β\172 ghijklmnopqrstuvwxyz 0 β 0 0 0 β 0 0 β 0 β 0 0 β 0 0 0
123β126 \x7Bβ\x7E \172β\176 {|}~ 0 β 0 0 0 β 0 β 0 0 0 0 0 0 0
127 \x7F \177 backspace character (DEL) β 0 0 0 0 0 0 0 0 0 0 0 0
Wide crew:
decimal hexadecimal octal characters iswcntrl iswprint iswspace iswblank iswgraph iswpunct iswalnum iswalpha iswupper iswlower iswdigit iswxdigit
0β8 \x0β\x8 \0β\10 control codes (NUL, etc.) β 0 0 0 0 0 0 0 0 0 0 0 0
9 \x9 \11 tab (\t) β 0 0 β 0 β 0 0 0 0 0 0 0 0 0
10β13 \xAβ\xD \12β\15 whitespaces (\n, \v, \f, \r) β 0 0 β 0 0 0 0 0 0 0 0 0 0
14β31 \xEβ\x1F \16β\37 control codes β 0 0 0 0 0 0 0 0 0 0 0 0
32 \x20 \40 space 0 β 0 β 0 β 0 0 0 0 0 0 0 0 0
33β47 \x21β\x2F \41β\57 !"#$%&'()*+,-./ 0 β 0 0 0 β 0 β 0 0 0 0 0 0 0
48β57 \x30β\x39 \60β\71 0123456789 0 β 0 0 0 β 0 0 β 0 0 0 0 β 0 β 0
58β64 \x3Aβ\x40 \72β\100 :;<=>?@ 0 β 0 0 0 β 0 β 0 0 0 0 0 0 0
65β70 \x41β\x46 \101β\106 ABCDEF 0 β 0 0 0 β 0 0 β 0 β 0 β 0 0 0 β 0
71β90 \x47β\x5A \107β\132 GHIJKLMNOPQRSTUVWXYZ 0 β 0 0 0 β 0 0 β 0 β 0 β 0 0 0 0
91β96 \x5Bβ\x60 \133β\140 [\]^_` 0 β 0 0 0 β 0 β 0 0 0 0 0 0 0
97β102 \x61β\x66 \141β\146 abcdef 0 β 0 0 0 β 0 0 β 0 β 0 0 β 0 0 β 0
103β122 \x67β\x7A \147β\172 ghijklmnopqrstuvwxyz 0 β 0 0 0 β 0 0 β 0 β 0 0 β 0 0 0
123β126 \x7Bβ\x7E \172β\176 {|}~ 0 β 0 0 0 β 0 β 0 0 0 0 0 0 0
127 \x7F \177 backspace character (DEL) β 0 0 0 0 0 0 0 0 0 0 0 0
That's the whole chart, bestie. No cap, no missing rows. πβ¨
π«Ά Signed, your Unix bestie. Source/version:http://cppreference.comΒ· Date:2024.06.10Β· Manual:std::iscntrl(3). π
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms