Stringa in C: cos’è, arrary, funzioni di string.h ed esempi

Foto dell'autore

Andrea Barbieri

 

Home > News feed > Competenze e tecnologie > Competenze informatiche > Stringa in C: cos’è, arrary, funzioni di string.h ed esempi

Cos’è una Stringa in C

Una stringa in C è un array di caratteri che termina con un carattere nullo speciale, ‘\0’. Questo carattere nullo indica la fine della stringa.

Rappresentazione delle Stringhe

Le stringhe in C sono rappresentate come array di caratteri. Ad esempio:

        char str[] = "Ciao";
    

Input/Output di Stringhe

Per leggere e scrivere stringhe, si possono usare le funzioni printf e scanf, oppure gets e puts. Ad esempio:

        char str[50];
        printf("Inserisci una stringa: ");
        gets(str);
        printf("La stringa inserita è: ");
        puts(str);
    

Funzioni della Libreria <string.h>

La libreria <string.h> in C fornisce numerose funzioni per manipolare stringhe e array di caratteri.

strlen: Lunghezza di una Stringa

La funzione strlen restituisce la lunghezza di una stringa data. Ad esempio:

    #include <string.h>
    #include <stdio.h>

    int main() {
        char str[] = "Ciao";
        int len = strlen(str);
        printf("Lunghezza: %d\n", len);
        return 0;
    }

strcpy: Copia di una Stringa

La funzione strcpy copia la stringa sorgente nella stringa di destinazione. Ad esempio:

    #include <string.h>
    #include <stdio.h>

    int main() {
        char src[] = "Ciao";
        char dest[10];
        strcpy(dest, src);
        printf("Destinazione: %s\n", dest);
        return 0;
    }

strcat: Concatenazione di Stringhe

La funzione strcat concatena due stringhe, aggiungendo la seconda alla fine della prima. Ad esempio:

    #include <string.h>
    #include <stdio.h>

    int main() {
        char str1[20] = "Ciao";
        char str2[] = " Mondo";
        strcat(str1, str2);
        printf("Concatenata: %s\n", str1);
        return 0;
    }

strcmp: Confronto di Stringhe

La funzione strcmp confronta due stringhe e restituisce un valore intero che indica la relazione tra le stringhe. Ad esempio:

    #include <string.h>
    #include <stdio.h>

    int main() {
        char str1[] = "Ciao";
        char str2[] = "Mondo";
        
        if (strcmp(str1, str2) == 0) {
            printf("Le stringhe sono uguali\n");
        } else {
            printf("Le stringhe sono diverse\n");
        }
        
        return 0;
    }

Altre Funzioni

  • strncpy: Copia un numero specificato di caratteri da una stringa all’altra.
  • strncat: Concatena un numero specificato di caratteri da una stringa all’altra.
  • strncmp: Confronta un numero specificato di caratteri tra due stringhe.
  • strstr: Trova la prima occorrenza di una sottostringa in una stringa.
  • strchr: Trova la prima occorrenza di un carattere in una stringa.
  • strrchr: Trova l’ultima occorrenza di un carattere in una stringa.

Esempio di un programma che utilizza varie operazioni sulle stringhe

Di seguito è riportato un esempio di un programma in C che dimostra l’uso di varie operazioni sulle stringhe.

        #include <stdio.h>
        #include <string.h>
        
        int main() {
            char str1[20] = "Programmare";
            char str2[20] = " in C";
            char str3[40];
        
            // Concatenazione
            strcpy(str3, str1);
            strcat(str3, str2);
            printf("Concatenazione: %s\n", str3);
        
            // Lunghezza
            printf("Lunghezza: %d\n", strlen(str3));
        
            // Confronto
            if (strcmp(str1, str2) == 0) {
                printf("Le stringhe sono uguali\n");
            } else {
                printf("Le stringhe sono diverse\n");
            }
            
            return 0;
        }
    

Questo programma inizia con la definizione di due stringhe, str1 e str2. Successivamente, concatena queste due stringhe in str3, stampa la lunghezza di str3 e confronta str1 e str2 utilizzando la funzione strcmp.

Manipolazione di Stringhe

In C, una stringa è un array di caratteri terminato da un carattere nullo. La manipolazione di queste stringhe è un aspetto fondamentale della programmazione in C.

Scorrere una Stringa

Per scorrere una stringa, generalmente utilizziamo un ciclo for o while. Qui c’è un esempio che mostra come scorrere una stringa utilizzando un ciclo for:

#include <stdio.h>

int main() {
    char str[] = "Ciao";
    for (int i = 0; str[i] != '\0'; i++) {
        printf("%c ", str[i]);
    }
    return 0;
}

Modificare i Caratteri di una Stringa

Modificare i caratteri di una stringa in C può essere fatto accedendo direttamente agli elementi dell’array e modificandoli. Ecco un esempio in cui convertiamo una stringa in maiuscolo:

#include <stdio.h>

int main() {
    char str[] = "Ciao";
    for (int i = 0; str[i] != '\0'; i++) {
        if(str[i] >= 'a' && str[i] <= 'z') {
            str[i] = str[i] - 'a' + 'A';
        }
    }
    printf("Stringa in Maiuscolo: %s\n", str);
    return 0;
}

Cercare Caratteri o Sottosezioni in una Stringa

Per cercare un carattere o una sottosezione in una stringa, possiamo utilizzare le funzioni strstr e strchr della libreria <string.h>. Ecco un esempio:

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Ciao Mondo";
    char sub[] = "Mondo";
    char *pos = strstr(str, sub);
    
    if (pos) {
        printf("Sottostringa trovata in posizione: %ld\n", pos - str);
    } else {
        printf("Sottostringa non trovata\n");
    }
    
    char *chPos = strchr(str, 'M');
    if (chPos) {
        printf("Carattere trovato in posizione: %ld\n", chPos - str);
    } else {
        printf("Carattere non trovato\n");
    }
    
    return 0;
}

In questo esempio, strstr cerca una sottosezione all’interno di una stringa e strchr cerca la prima occorrenza di un carattere in una stringa. Entrambe le funzioni restituiscono un puntatore alla posizione, oppure NULL se la ricerca non ha esito positivo.

Stringhe e Puntatori

In C, le stringhe sono comunemente manipolate usando puntatori. Un puntatore a una stringa è un puntatore al suo primo carattere.

#include <stdio.h>

int main() {
    char str[] = "Ciao";
    char *ptr = str;
    
    while (*ptr != '\0') {
        printf("%c ", *ptr);
        ptr++;
    }
    
    return 0;
}

In questo esempio, ptr è un puntatore al primo carattere della stringa str, e viene utilizzato per scorrere la stringa.

Overflow del Buffer

Un overflow del buffer si verifica quando scriviamo dati oltre la fine del buffer allocato. Questo è un problema comune e potenzialmente pericoloso in C.

#include <stdio.h>

int main() {
    char buffer[10];
    printf("Inserisci una stringa: ");
    gets(buffer);
    printf("Hai inserito: %s\n", buffer);
    
    return 0;
}

In questo esempio, se l’utente inserisce più di 9 caratteri, si verificherà un overflow del buffer, potenzialmente sovrascrivendo altre aree di memoria.

Uso di gets()

La funzione gets() è usata per leggere una linea di testo, ma è pericolosa perché può causare overflow del buffer. E’ generalmente sconsigliata, e si preferisce usare fgets().

#include <stdio.h>

int main() {
    char buffer[10];
    printf("Inserisci una stringa: ");
    fgets(buffer, sizeof(buffer), stdin);
    printf("Hai inserito: %s\n", buffer);
    
    return 0;
}

In questo esempio, usiamo fgets() al posto di gets() per evitare l’overflow del buffer.

Stringhe e Funzioni

In C, possiamo passare stringhe come argomenti a funzioni passando i loro puntatori. Ecco un esempio di una funzione che calcola la lunghezza di una stringa:

#include <stdio.h>

int lengthOfString(const char *str) {
    int length = 0;
    while (*str != '\0') {
        length++;
        str++;
    }
    return length;
}

int main() {
    char str[] = "Ciao Mondo";
    printf("La lunghezza della stringa è: %d\n", lengthOfString(str));
    
    return 0;
}

In questo esempio, la funzione lengthOfString accetta un puntatore a una stringa come parametro e restituisce la sua lunghezza.

Domande e risposte sulle Stringhe in C

Come si può determinare la lunghezza di una stringa in C senza usare la funzione strlen()?

Puoi determinare la lunghezza di una stringa iterando attraverso i suoi caratteri fino a raggiungere il carattere null ‘\0’, e contando il numero di iterazioni. Ecco un esempio:

#include <stdio.h>

int stringLength(const char *str) {
    int length = 0;
    while (*str != '\0') {
        length++;
        str++;
    }
    return length;
}

Qual è il rischio associato all’uso della funzione gets() in C?

L’uso di gets() può causare un overflow del buffer, perché non controlla la lunghezza dell’input, il che può portare a comportamenti imprevisti, errori e vulnerabilità di sicurezza.

Come si possono concatenare due stringhe in C?

In C, puoi usare la funzione strcat() della libreria <string.h> per concatenare due stringhe. Assicurati che la stringa di destinazione abbia spazio sufficiente per contenere entrambe le stringhe.

È possibile modificare il contenuto di una stringa dichiarata come array di caratteri?

Sì, è possibile modificare il contenuto di una stringa dichiarata come array di caratteri, ma non è possibile modificarne la dimensione.

Come si confrontano due stringhe in C?

Per confrontare due stringhe in C, si utilizza la funzione strcmp() della libreria <string.h>. Restituisce 0 se le stringhe sono uguali, un valore negativo se la prima stringa è minore della seconda, e un valore positivo se la prima stringa è maggiore della seconda.

Come si può copiare una stringa in un altro array di caratteri in C?

Puoi usare la funzione strcpy() della libreria <string.h> per copiare una stringa in un altro array di caratteri. È importante che l’array di destinazione sia abbastanza grande per contenere la stringa copiata.

#include <stdio.h>
#include <string.h>

int main() {
    char source[] = "Ciao";
    char destination[10];

    strcpy(destination, source);
    printf("Stringa copiata: %s\n", destination);
    
    return 0;
}

Lascia un commento

Panoramica privacy
Multinazionali Tech

Questo sito web utilizza i cookie per consentirci di fornirti la migliore esperienza utente possibile. Le informazioni sui cookie vengono memorizzate nel tuo browser ed eseguono funzioni come riconoscerti quando ritorni sul nostro sito Web e aiutare il nostro team a capire quali sezioni del sito Web trovi più interessanti e utili. Maggiori informazioni qui

Cookie strettamente necessari

I cookie strettamente necessari dovrebbero essere sempre attivati per poter salvare le tue preferenze per le impostazioni dei cookie.

Cookie di terze parti

Questo sito Web utilizza Google Analytics per raccogliere informazioni anonime come il numero di visitatori del sito e le pagine più popolari.

Mantenere questo cookie abilitato ci aiuta a migliorare il nostro sito Web.