Uso di strcpy()
Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 16 di 63.
Hai imparato a trovare la lunghezza delle stringhe con strlen(), ma cosa succede se devi copiare il contenuto di una stringa in un'altra? In C, non puoi usare l'operatore di assegnazione (=) per copiare le stringhe come faresti con le normali variabili.
Il motivo è che le stringhe sono array di caratteri e, quando usi = con gli array, copi solo l'indirizzo di memoria, non il contenuto effettivo. È qui che diventa essenziale la funzione strcpy() della libreria <string.h>.
#include <stdio.h>
#include <string.h>
char source[] = "Hello";
char destination[20];
strcpy(destination, source); // Copia "Hello" in destinationLa funzione strcpy() accetta due argomenti: l’array di destinazione (dove vuoi copiare) e la stringa sorgente (ciò che vuoi copiare). Copia ogni carattere dalla sorgente alla destinazione, incluso il terminatore nullo.
È fondamentale che l'array di destinazione sia abbastanza grande da contenere l'intera stringa sorgente più il terminatore nullo. Se la destinazione è troppo piccola, strcpy() scriverà oltre i limiti dell'array, causando un comportamento indefinito.
Questa funzione è fondamentale per la manipolazione delle stringhe in C: ti permette di duplicare le stringhe, inizializzare le variabili stringa con contenuti esistenti e preparare le stringhe per ulteriori elaborazioni.
Sfida
FacileScrivi un programma in C che dimostri la copia di stringhe usando la funzione strcpy(). Il tuo programma dovrebbe:
- Leggere un intero
nche rappresenta il numero di operazioni sulle stringhe da eseguire - Per ogni operazione:
- Leggere una stringa sorgente dall'input
- Dichiarare un array di caratteri chiamato
destinationcon 100 elementi - Usare
strcpy()per copiare la stringa sorgente nell'array di destinazione - Stampare sia la stringa sorgente originale sia la stringa di destinazione copiata
- Dopo tutte le operazioni, dimostrare che le stringhe copiate sono indipendenti:
- Modificare il primo carattere dell'ultimo array di destinazione in 'X'
- Stampare la stringa di destinazione modificata per mostrare che è cambiata
Ricorda di includere l'header <string.h> per usare la funzione strcpy().
Il tuo output dovrebbe mostrare i risultati nel seguente formato:
Source: [source_string]
Destination: [copied_string]
Source: [source_string]
Destination: [copied_string]
...
Modified last destination: [modified_string]Per esempio, se l'input è:
3
hello
world
programmingIl tuo output dovrebbe essere:
Source: hello
Destination: hello
Source: world
Destination: world
Source: programming
Destination: programming
Modified last destination: XrogrammingQuesta sfida mette alla prova la tua comprensione dell'uso di strcpy() per copiare il contenuto di una stringa da un array di caratteri a un altro, della corretta allocazione della memoria per gli array di destinazione e dimostra che le stringhe copiate sono indipendenti dalle loro sorgenti.
Provalo tu
#include <stdio.h>
#include <string.h>
int main() {
int n;
scanf("%d", &n);
char source[100];
char destination[100];
// TODO: Scrivi qui il tuo codice
// Usa un ciclo per elaborare n operazioni sulle stringhe
// Per ogni operazione:
// - Leggi la stringa source
// - Usa strcpy() per copiare source in destination
// - Stampa entrambe le stringhe nel formato richiesto
// TODO: Dopo il ciclo, modifica il primo carattere dell'ultima destination
// e stampa la stringa modificata
return 0;
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Fondamenti dei puntatori
Che cos’è un puntatore?Dichiarare i puntatoriL’operatore di indirizzo (&)L’operatore di dereferenziazione (*)Puntatori NULLRiepilogo: nozioni di base sui puntatori4Progetto: Utility di testo semplice
Panoramica del progettoConteggio dei caratteri2Puntatori e array
I nomi degli array come puntatoriElementi degli array e puntatoriAritmetica dei puntatoriConfrontare i puntatoriRiepilogo: attraversamento di un array con i puntatori5Puntatori e funzioni
Passaggio per valorePassare puntatori alle funzioniModificare le variabili tramite puntatoriUn esempio classico: scambiare valoriPassare array alle funzioniRiepilogo: argomenti puntatore nelle funzioni3Array di caratteri e stringhe
Stringhe come array di charIl terminatore nullInput di stringhe con scanfUso di strlen()Uso di strcpy()Uso di strcat()Uso di strcmp()Riepilogo: funzioni di base per le stringhe6Gestione della memoria
Memoria Stack vs. HeapAllocazione dinamica - malloc()Usare sizeof() per l'allocazioneVerificare il fallimento dell'allocazioneLiberare la memoria con free()Allocare con calloc()Riepilogo: array dinamico9Progetto: Inserimento semplice di un contatto
Progetto: Definire una struct ContattoFunzione per creare un contattoEsercitati da solo: Compilatore C online