C/Appendice/Librerie standard/ctype.h

Indice del libro

ctype.h è l'header file che, all'interno della libreria standard del C, dichiara funzioni utilizzate per la classificazione dei caratteri.

Funzioni

modifica

Il file ctype.h contiene una dozzina di funzioni di classificazione dei caratteri: esse sono tutte dipendenti dalle impostazioni locali del sistema, tranne isdigit(). Inoltre, le funzioni possono essere divise in due sottogruppi: quelle utilizzate per la verifica delle proprietà dei caratteri e quelle per la conversione degli stessi.

Nome Descrizione
Funzioni per la verifica delle proprietà dei caratteri
Ritornano zero se falso o un numero diverso da zero se vero.
int isalnum(int ch) Controlla che il carattere passato sia alfanumerico.
int isalpha(int ch) Controlla che il carattere passato sia alfabetico.
int isblank(int ch) Controlla che il carattere passato sia bianco, cioè non visibile a schermo (spazio o tabulazione). (introdotto dal C99)
int iscntrl(int ch) Controlla che il carattere passato sia di controllo.
int isdigit(int ch) Controlla che il carattere passato sia numerico. (non dipendente dalle impostazioni locali)
int isgraph(int ch) Controlla che il carattere passato sia grafico, cioè abbia un glifo ad esso associato. I caratteri di spaziatura, ad esempio, non sono considerati grafici.
int islower(int ch) Controlla che il carattere passato sia minuscolo.
int isprint(int ch) Controlla che il carattere passato sia stampabile.
int ispunct(int ch) Controlla che il carattere passato sia di punteggiatura.
int isspace(int ch) Controlla che il carattere passato sia di spaziatura.
int isupper(int ch) Controlla che il carattere passato sia maiuscolo.
int isxdigit(int ch) Controlla che il carattere passato sia esadecimale, cioè sia compreso in 0-9, oppure a-f, oppure A-F.
Funzioni per la conversione dei caratteri
Ritornano il carattere convertito.
int tolower(int ch) Converte il carattere passato nel suo corrispondente minuscolo, se applicabile.
int toupper(int ch) Converte il carattere passato nel suo corrispondente maiuscolo, se applicabile.

Errori comuni

modifica

Lo standard C99 afferma chiaramente (§7.4-1):

In tutti i casi gli argomenti sono degli int, il valore dei quali deve essere rappresentabile come un unsigned char oppure deve essere equivalente al valore della macro EOF. Se l'argomento assume un qualsiasi altro valore, il comportamento è indefinito.

Sfortunatamente molti programmatori dimenticano che una variabile di tipo char può essere sia con segno che senza segno, a seconda dell'implementazione. Se il tipo char è con segno, allora la conversione implicita da char a int potrebbe generare dei valori negativi, che generano un comportamento indefinito. Generalmente accade che l'argomento negativo viene usato come indice in una tabella di ricerca, accedendo ad un'area fuori dalla tabella stessa e potenzialmente fuori dalla memoria allocata dal programma.

Il modo corretto per utilizzare i parametri char è, quindi, quello di eseguire un casting ad unsigned char.