Sei sulla pagina 1di 4

ctype.

h - Wikipedia

http://it.wikipedia.org/wiki/Ctype.h

ctype.h
Da Wikipedia, l'enciclopedia libera.

ctype.h l'header file che, all'interno della libreria standard del C, dichiara funzioni utilizzate per la classificazione dei caratteri.
Indice 1 2 3 4 5 6 Storia Implementazione Funzioni Errori comuni Altri progetti Collegamenti esterni

Libreria standard del C++

Libreria standard del C assert.h ctype.h errno.h float.h math.h stdio.h stdlib.h string.h time.h

Storia

I primi programmatori in linguaggio C su Unix cominciarono rapidamente a sviluppare dei controlli per classificare i caratteri tra diversi tipi: numero, lettera,carattere di controllo, oppure sottoinsiemi quali lettera maiuscola o lettera minuscola, per concludere con insiemi pi vasti quali carattere stampabile. Per eseguire queste classificazioni, inizialmente furono ideati dei test molto semplici; il seguente esempio mostra come identificare se il carattere contenuto nella variabile c una lettera:
if ('A' <= c && c <= 'Z' || 'a' <= c && c <= 'z')

Il risultato di questa espressione valido se c rappresenta un carattere secondo la codifica ASCII: al contrario, non funziona se il set di caratteri usato sulla macchina , ad esempio, EBCDIC. Oltre a non essere portabile, un programma basato pesantemente su test come questo sarebbe molto difficile da mantenere, data la non immediata comprensibilit del codice: questo esporrebbe il programmatore ad errori logici pi o meno gravi.

Implementazione
A differenza di quanto riportato sopra, le funzioni di classificazione di caratteri non sono scritte in forma di test comparativi. Nella maggior parte delle librerie

1 di 4

30/06/2010 12:44

ctype.h - Wikipedia

http://it.wikipedia.org/wiki/Ctype.h

C, infatti, esse sono implementate con delle ricerche in tabelle allocate staticamente. Ad esempio, la tabella pu essere implementata con un array di 256 interi da 8 bit ciascuno, organizzati come bitfield, dove a ciascun bit corrisponde una particolare propriet del carattere: numero, lettera e cos via. Se il bit meno significativo del numero intero corrispondesse alla propriet numero, il codice per la funzione (o, meglio, la macro) isdigit() potrebbe essere scritto semplicemente come:
#define isdigit(x) (TABLE[x] & 1)

Le prime versioni di Linux, per, utilizzavano un metodo simile al seguente, che potenzialmente esponeva il codice ad errori logici:
#define isdigit(x) ((x) >= '0' && (x) <= '9')

Questa definizione potrebbe causare problemi se la determinazione del valore di x avesse degli effetti collaterali, come in isdigit(x++) oppure isdigit(esegui_qualcosa()). In questo caso l'espressione sarebbe valutata due volte, cosa non immediatamente evidente al programmatore distratto. Per questo, il metodo della tabella utilizzato pi diffusamente (vedere anche il messaggio di Linus Torvalds nella mailing list del kernel Linux, in basso alla pagina).

Funzioni
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.
isalnum isalpha isblank iscntrl

Controlla che il carattere passato sia alfanumerico. Controlla che il carattere passato sia alfabetico. Controlla che il carattere passato sia bianco, cio non visibile a schermo (spazio o tabulazione). (introdotto dal C99) Controlla che il carattere passato sia di controllo.

2 di 4

30/06/2010 12:44

ctype.h - Wikipedia

http://it.wikipedia.org/wiki/Ctype.h

isdigit

Controlla che il carattere passato sia numerico. (non dipendente dalle impostazioni locali) Controlla che il carattere passato sia grafico, cio abbia un glifo ad esso associato. I caratteri di spaziatura, ad esempio, non sono considerati grafici. Controlla che il carattere passato sia minuscolo. Controlla che il carattere passato sia stampabile. Controlla che il carattere passato sia di punteggiatura. Controlla che il carattere passato sia di spaziatura. Controlla che il carattere passato sia maiuscolo. Controlla che il carattere passato sia esadecimale, cio sia compreso in 0-9, oppure a-f, oppure A-F.

isgraph

islower isprint ispunct isspace isupper isxdigit

Funzioni per la conversione dei caratteri


Ritornano il carattere convertito.
tolower

Converte il carattere passato nel suo corrispondente minuscolo, se applicabile. Converte il carattere passato nel suo corrispondente maiuscolo, se applicabile.

toupper

La versione 3 della Single Unix Specification aggiunge ulteriori funzionalit aggiuntive: Nome
isascii

Descrizione Controlla che il carattere passato sia compatibile con il set di caratteri ASCII. Converte il carattere passato affinch sia compatibile con il set di caratteri ASCII.

toascii

Errori comuni
Lo standard C99 afferma chiaramente (7.4-1): In all cases the argument is an int , the value of which shall be representable as an unsigned char or shall equal the value of the macro EOF . If the argument has any other value, the behavior is undefined. In italiano:

3 di 4

30/06/2010 12:44

ctype.h - Wikipedia

http://it.wikipedia.org/wiki/Ctype.h

In tutti i casi [cio tutti i parametri di funzione, ndt] 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, arrivando anche a poter generare un errore di segmentazione. Il modo corretto per utilizzare i parametri char , quindi, quello di eseguire un casting ad unsigned char.

Altri progetti
Wikibooks contiene testi o manuali su Ctype.h

Collegamenti esterni
(EN) Spiegazione del metodo della tabella (http://groups.google.com /groups?selm=15FWF-45f-17%40gated-at.bofh.it) da parte di Linus Torvalds Categoria: Libreria standard del C Ultima modifica per la pagina: 17:17, 21 mar 2009. Il testo disponibile secondo la licenza Creative Commons AttribuzioneCondividi allo stesso modo; possono applicarsi condizioni ulteriori. Vedi le condizioni d'uso per i dettagli. Wikipedia un marchio registrato della Wikimedia Foundation, Inc. Politica sulla privacy Informazioni su Wikipedia Avvertenze

4 di 4

30/06/2010 12:44