Функции ctype.h не очень удобны для символов, которые содержат что-то кроме ASCII. Языковой стандарт по умолчанию - C
(по сути, такой же, как ASCII на большинстве компьютеров), независимо от того, какой системный языковой стандарт. Даже если вы используете setlocale
для изменения языкового стандарта, есть вероятность, что система использует набор символов с длиной более 8 битных символов (например, UTF-8), и в этом случае вы не сможете отличить ничего полезного от одного символа.
Широкие символы правильно обрабатывают больше дел, но даже они выходят из строя слишком часто.
Итак, если вы хотите надежно поддерживать не-ASCII-пространство, вы должны сделать это самостоятельно (или, возможно, использовать существующую библиотеку).
Примечание: ASCII имеет только коды символов 0-127 (или 32-127), и то, что некоторые называют 8-битным ASCII, на самом деле является другим набором символов (обычно CP437, CP1252, ISO-8859-1 и часто также что-то еще).