# C/Variabili, operatori e costanti/Stringhe

C
Copertina Tutti i moduli · Sviluppo
* LinguaggioC/Linguaggio
** PanoramicaC/Linguaggio/Panoramica
** Struttura del linguaggioC/Linguaggio/Struttura del linguaggio
* Variabili, operatori e costantiC/Variabili, operatori e costanti
** VariabiliC/Variabili, operatori e costanti/Variabili
** Operatori aritmeticiC/Variabili, operatori e costanti/Operatori aritmetici
** Operatori sui bitC/Variabili, operatori e costanti/Operatori sui bit
** CostantiC/Variabili, operatori e costanti/Costanti
* Blocchi e funzioniC/Blocchi e funzioni
** Blocchi if e switchC/Blocchi e funzioni/Blocchi if e switch
** Operatori logiciC/Blocchi e funzioni/Operatori logici
** CicliC/Blocchi e funzioni/Cicli
** FunzioniC/Blocchi e funzioni/Funzioni
** mainC/Blocchi e funzioni/main
** LibrerieC/Blocchi e funzioni/Librerie
** RicorsivitàC/Blocchi e funzioni/Ricorsività
* Vettori e puntatoriC/Vettori e puntatori
** VettoriC/Vettori e puntatori/Vettori
** PuntatoriC/Vettori e puntatori/Puntatori
** Interscambiabilità tra puntatori e vettoriC/Vettori e puntatori/Interscambiabilità tra puntatori e vettori
* StringheC/Variabili, operatori e costanti/Stringhe
* Enumerazioni, strutture e unioniC/Enumerazioni, strutture e unioni
** EnumerazioniC/Enumerazioni, strutture e unioni/Enumerazioni
** StruttureC/Enumerazioni, strutture e unioni/Strutture
** UnioniC/Enumerazioni, strutture e unioni/Unioni
* Conversioni di tipoC/Conversioni di tipo
* Lettura e scrittura su fileC/Lettura e scrittura su file
** File di TestoC/Lettura e scrittura su file/File di Testo
** File BinariC/Lettura e scrittura su file/File Binari
* Compilatore e precompilatoreC/Compilatore e precompilatore
** CompilatoreC/Compilatore e precompilatore/Compilatore
** DirettiveC/Compilatore e precompilatore/Direttive
** HeaderC/Compilatore e precompilatore/Header
* VisibilitàC/Visibilità
* Gestione della memoriaC/Gestione della memoria
* Le applicazioni CGIC/Le applicazioni CGI
* Appendice
** Librerie standardC/Appendice/Librerie standard
*** assert.hC/Appendice/Librerie standard/assert.h
*** ctype.hC/Appendice/Librerie standard/ctype.h
*** errno.hC/Appendice/Librerie standard/errno.h
*** float.hC/Appendice/Librerie standard/float.h
*** limits.hC/Appendice/Librerie standard/limits.h
*** locale.hC/Appendice/Librerie standard/locale.h
*** math.hC/Appendice/Librerie standard/math.h
*** setjmp.hC/Appendice/Librerie standard/setjmp.h
*** signal.hC/Appendice/Librerie standard/signal.h
*** stdarg.hC/Appendice/Librerie standard/stdarg.h
*** stddef.hC/Appendice/Librerie standard/stddef.h
*** stdio.hC/Appendice/Librerie standard/stdio.h
*** stdlib.hC/Appendice/Librerie standard/stdlib.h
*** string.hC/Appendice/Librerie standard/string.h
*** time.hC/Appendice/Librerie standard/time.h
** StrumentiC/Appendice/Strumenti
*** InstallerC/Appendice/Strumenti/Installer
** Librerie esterneC/Appendice/Librerie esterne
* Bibliografia
    IndiceC/Indice
Modifica il sommario
Le stringhe in C sono dei vettori di caratteri e non come tipo unico. Le stringhe C sono sempre concluse dal carattere nullo.

## Dichiarazione di una stringa

È possibile anche assegnare una stringa ad un puntatore ad un char, ma è sconsigliato perché si scriverà in parti di memoria non allocate e sovrascrivere dati necessari all'esecuzione del programma. Ciò può essere fatto in modo sicuro con le funzioni di allocazione dinamica della memoria. Il puntatore, in questo caso, punterà al primo carattere della stringa.
Una stringa non è altro che un array di elementi di tipo char. Questo fa pensare subito a un tipo di dichiarazione immediato (ma alquanto scomodo):
Il carattere \0 è necessario per terminare la stringa. La dichiarazione vista sopra non è comodissima, ragion per cui il C consente di dichiarare le stringhe direttamente così:
Ovviamente si può dichiarare le stringhe senza inizializzarle. In questo caso le si dichiara specificando il nome e la dimensione:

## Uso delle stringhe
### Visualizzazione dei caratteri di una stringa

Lo specificatore %s indica una stringa alla funzione printf.

### Lettura sicura dei caratteri di una stringa

fgets(char *str, int lun, FILE *stream) legge i caratteri da un file che se si pone come stdin è lo schermo della console e li memorizza come una stringa C finché (num-1) caratteri sono stati letti o un ritorno a capo o si raggiunge la fine del file (EOF). Un carattere di nuova riga fa interrompere la lettura, ma è considerato un carattere valido e, pertanto, è incluso nella stringa str. Un carattere nullo viene automaticamente aggiunto in str dopo i caratteri letti per segnalare la fine della stringa C.

## Funzioni per le stringhe

string.h è l'header file della libreria standard del C che contiene definizioni di macro, costanti e dichiarazioni di funzioni e tipi usati non solo nella manipolazione delle stringhe ma anche nella manipolazione della memoria.
Le funzioni dichiarate in string.h sono molto popolari ed essendo parte della libreria standard del C, il loro funzionamento è garantito su ogni piattaforma che supporta il linguaggio C. Le funzioni in questione lavorano solamente con caratteri ASCII o con un set di caratteri che lo estende in modo compatibile come l'ISO-8859-1; i set di caratteri a più byte compatibili con l'ASCII, come l'UTF-8, possono funzionare solo a condizione che la lunghezza della stringa sia interpretata come il numero di byte nella stessa piuttosto che il numero di caratteri Unicode. La gestione di stringhe non compatibili con l'ASCII viene generalmente risolto con l'uso della libreria wchar.h.