Stringhe e array di caratteri in C

Nel linguaggio C una stringa è definita da un insieme di caratteri rappresentati sotto forma di un array monodimensionale che termina con il carattere nullo '\0'. In particolare i caratteri utilizzabili sono definiti dalla variabile di tipo char ed occupano singolarmente una cella o posizione all’interno dell’array. Nello specifico un array di caratteri viene definito nel seguente modo:


 
char nome_stringa[dimensione_stringa];

dove la keyword char è essenziale per creare un array di caratteri, nome_stringa indica il nome della variabile, mentre dimensione_stringa indica la dimensione dell’array, ricordando che bisogna conteggiare anche il carattere nullo '\0' che viene posto al termine dell’array.
Il carattere nullo è fondamentale in quanto indica la fine dell’array di caratteri, permettendo di evitare di dover conoscere a priori la lunghezza della stringa.

Nota: nel linguaggio C le stringhe non costituiscono un tipo standard di dato come in altri linguaggi di programmazione, infatti non sono utilizzabili dalla maggior parte degli operatori, ma sono comunque utilizzabili da operatori di I/O e da particolari funzioni di librerie (come la libreria string.h).

Di seguito viene riportato un esempio di come implementare una stringa nel C. Consideriamo la seguente parola “Mario”, essa è di fatto una stringa e per poterla implementare nel linguaggio C effettuiamo la seguente dichiarazione ed inizializzazione dell’array di caratteri:


 
char nome[6] = {'M', 'a', 'r', 'i', 'o', '\0'};

essendo l’array composto da caratteri, ogni carattere deve essere racchiuso tra apici.
Come è possibile notare, l’array appena definito possiede dimensione 6, ciò è dato dal numero di caratteri che compongono la stringa “Mario” e dal carattere nullo '\0'.
Oltre ad utilizzare il metodo appena descritto, si può utilizzare anche la seguente sintassi:


 
char nome[] = "Mario";

in questa maniera non bisogna indicare la dimensione dell’array e sarà il compilatore ad aggiungere automaticamente al termine della stringa il carattere nullo '\0'. Questa sintassi può essere utilizzata solamente nel caso in cui l’array viene inizializzato durante la sua dichiarazione, altrimenti il compilatore non sa quanto spazio allocare per tale variabile.

Per poter stampare a schermo una stringa possiamo fare affidamento alla funzione printf insieme alla specifica di formato %s, come nel seguente caso:


 
char nome[] = "Mario";
printf("%s", nome);

Da notare che a schermo verrà stampato solamente la stringa, senza il carattere nullo

Invece di utilizzare la specifica di formato %s è anche possibile stampare ogni singolo carattere dell’array usando una printf con la specifica di formato %c all’interno di un ciclo.
Per poter scorrere un array di caratteri senza conoscere la sua lunghezza si può iterare fino a che non si raggiunge il carattere nullo:


 
char nome[] = "Mario";
int i = 0;
while(nome[i] != '\0'){
    printf("%c", nome[i]);
    i++;
}

Nota: la dimensione dell’array indicata durante la dichiarazione può essere anche più grande rispetto alla dimensione effettiva della stringa. Questo è dovuto al carattere nullo '\0' che permette di determinare la fine della stringa, indipendentemente dal fatto che una parte dell’array risulta essere vuoto.

Esempio di stringhe nel C

Nel seguente esempio creiamo un programma che chiede all’utente di inserire il nome ed il cognome. Tali stringhe verranno immagazzinate all’interno di due array di caratteri e successivamente stampate a schermo.


 
#include <stdio.h>

int main(){
    char nome[50], cognome[50];
    
    printf("Inserisci un nome: ");
    scanf("%s", nome);
    
    printf("Inserisci un cognome: ");
    scanf("%s", cognome);
    
    printf("Dati: %s %s", nome, cognome);
    

    return 0;
}

Indice pagine linguaggio C: