C Academy · Lezione

strlen, strcpy, strcat

Funzioni fondamentali per le stringhe

Lezione 1 di 413 passaggi

strlen, strcpy, strcat è una lezione C Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C Academy include 4 lezioni in totale.

Stringhe in C

In C, una stringa è semplicemente un array di char che termina con uno speciale carattere terminatore null '\0'.

Le funzioni in <string.h> si basano su questo terminatore per sapere dove termina una stringa. Senza di esso, leggono oltre la fine dell'array.

#include <stdio.h>

int main(void) {
    char name[] = "Alice";
    printf("%s\n", name);
    printf("Bytes used: %lu\n", sizeof(name));
    return 0;
}

Includere string.h

Per utilizzare le funzioni sulle stringhe è necessario includere l'header:

  • #include <string.h>

Questo rende disponibili strlen, strcpy, strcat, strcmp e altre funzioni.

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

int main(void) {
    char greeting[] = "Hello";
    printf("Length is %lu\n", strlen(greeting));
    return 0;
}

strlen: contare i caratteri

strlen restituisce il numero di caratteri prima del terminatore null. Non conta il carattere '\0'.

Perciò strlen("cat") restituisce 3, anche se l'array occupa 4 byte.

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

int main(void) {
    char word[] = "cat";
    printf("strlen = %lu\n", strlen(word));
    printf("sizeof = %lu\n", sizeof(word));
    return 0;
}

strlen è O(n)

Poiché le stringhe C non memorizzano la lunghezza, strlen deve attraversare ogni carattere finché non trova '\0'.

Per questo è un'operazione O(n). Eviti di chiamarla ripetutamente nella condizione di un ciclo per stringhe grandi.

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

int main(void) {
    char msg[] = "programming";
    size_t len = strlen(msg);
    for (size_t i = 0; i < len; i++) {
        printf("%c", msg[i]);
    }
    printf("\n");
    return 0;
}

strcpy: copiare le stringhe

Non è possibile copiare le stringhe con =. Utilizzi strcpy(dest, src), che copia src in dest, incluso il terminatore null.

La destinazione deve essere sufficientemente grande per contenere la sorgente e il terminatore.

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

int main(void) {
    char src[] = "Hello";
    char dest[20];
    strcpy(dest, src);
    printf("%s\n", dest);
    return 0;
}

pericolo di overflow del buffer con strcpy

Se dest è troppo piccolo, strcpy scrive oltre il buffer, corrompendo la memoria. Questo è un classico bug di sicurezza.

Preferisca strncpy(dest, src, n), che copia al massimo n byte. Nota: strncpy potrebbe non aggiungere il terminatore null se src è troppo lunga.

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

int main(void) {
    char src[] = "LongString";
    char dest[5];
    strncpy(dest, src, 4);
    dest[4] = '\0';
    printf("%s\n", dest);
    return 0;
}

strcat: concatenazione di stringhe

strcat(dest, src) aggiunge src alla fine di dest. Inizia a scrivere dal terminatore nullo di dest e ne aggiunge uno nuovo alla fine.

dest deve essere già una stringa valida con spazio libero sufficiente.

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

int main(void) {
    char buffer[20] = "Hello, ";
    strcat(buffer, "World");
    printf("%s\n", buffer);
    return 0;
}

Costruire stringhe passo dopo passo

È possibile concatenare strcpy e strcat per costruire una stringa un pezzo alla volta.

Iniziate sempre con un buffer inizializzato, in modo che il primo strcat trovi un terminatore valido.

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

int main(void) {
    char full[50];
    strcpy(full, "Mr. ");
    strcat(full, "John ");
    strcat(full, "Smith");
    printf("%s\n", full);
    return 0;
}

Concatenazione più sicura con strncat

strncat(dest, src, n) aggiunge al massimo n caratteri di src, quindi aggiunge sempre un terminatore nullo.

Questo aiuta a prevenire gli overflow quando la lunghezza della sorgente è sconosciuta.

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

int main(void) {
    char dest[16] = "Data: ";
    char src[] = "1234567890";
    strncat(dest, src, 5);
    printf("%s\n", dest);
    return 0;
}

Valori restituiti

Sia strcpy sia strcat restituiscono un puntatore a dest. Questo consente di annidare le chiamate, anche se può compromettere la leggibilità.

strlen restituisce un size_t, che è senza segno. Fate attenzione quando lo confrontate con interi con segno.

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

int main(void) {
    char a[20] = "foo";
    char b[] = "bar";
    printf("%s\n", strcat(a, b));
    return 0;
}

Errore comune nell'allocazione

Un errore frequente consiste nel dimenticare il +1 per il terminatore nullo quando si dimensiona un buffer.

Per una stringa di lunghezza n servono n + 1 byte. La lunghezza combinata di due stringhe unite è strlen(a) + strlen(b) + 1.

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

int main(void) {
    char a[] = "abc";
    char b[] = "de";
    size_t needed = strlen(a) + strlen(b) + 1;
    printf("Need %lu bytes\n", needed);
    return 0;
}

Verifica rapida

Verificate la vostra comprensione delle lunghezze delle stringhe.

Riepilogo

Avete imparato le funzioni fondamentali di string.h:

  • strlen conta i caratteri prima di '\0' (O(n)).
  • strcpy copia una stringa; la destinazione deve essere abbastanza grande.
  • strcat aggiunge contenuto a una stringa esistente.
  • Riservate sempre spazio per il terminatore nullo e preferite le varianti strn* per maggiore sicurezza.
Gratis per iniziare

Impara C con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
39
Lezioni
144

Domande Frequenti

La lezione «strlen, strcpy, strcat» è gratuita?

Sì — il testo completo di «strlen, strcpy, strcat» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C Academy, passa a CoddyKit PRO. Il corso C Academy include 4 lezioni in totale.

Cosa imparerò in «strlen, strcpy, strcat»?

Funzioni fondamentali per le stringhe Eserciti C Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C Academy?

Non è richiesta alcuna esperienza precedente. C Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «strlen, strcpy, strcat»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C Academy?

Sì. Ogni lezione C Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. strlen, strcpy, strcat
  2. strcmp e confronto
  3. strtok e tokenizzazione
  4. memcpy e memset
← Torna a C Academy