Concetti Chiave
- La struttura 'prodotto' definisce un record con attributi per codice, nome, prezzo e numero di pezzi.
- La funzione 'copiaProdottop' copia i dati di una struttura 'prodotto' da sorgente a destinazione, duplicando la stringa 'nome'.
- La funzione 'strdup' crea una copia di una stringa in una nuova locazione di memoria, gestendo l'allocazione con 'malloc'.
- 'strdup' restituisce un puntatore alla nuova stringa duplicata o null se l'allocazione fallisce, richiedendo la gestione della memoria da parte dell'utente.
- La corretta implementazione di 'strdup' include l'allocazione di memoria e la copia della stringa originale usando 'strcpy'.
Definizione della struttura prodotto
Data la dichiarazione del record che definisce un prodotto:
typedef struct{
int codice;
char *nome;
float prezzo;
int numPezzi;
}prodotto;
Si scriva una funzione in grado di copiare il contenuto di una struttura in un’altra, duplicando la stringa
nome. La struttura destinazione viene ricevuta per indirizzo, mentre la sorgente viene ricevuta per
valore.
void copiaProdottop(prodotto * dst, prodotto src)
{
*dst = src; //assegnazione diretta fra record
dst nome = strdup(src.nome);
}
Descrizione della funzione strdup
La funzione strdup()
#include
char *strdup(const char *s);
Description
Copies a string into a newly created location.
strdup makes a duplicate of string s, obtaining space with a call to malloc. The allocated space
is (strlen(s) + 1) bytes long. The user is responsible for freeing the space allocated by strdup
when it is no longer needed.
Return Value
strdup returns a pointer to the storage location containing the duplicated string, or returns
null if space could not be allocated.
Implementazione della funzione strdup
Codifica la funzione strdup()
char *strdup(const char *s)
{
char *p;
p = (char*)malloc(strlen(s) + 1); // p = new char [strlen(s) + 1];
if (p != NULL)
strcpy(p,s);
return p;
}
Domande da interrogazione
- Qual è la funzione principale della struttura `prodotto` definita nel codice?
- Come funziona la funzione `copiaProdottop` e quale è il suo scopo?
- Qual è il comportamento della funzione `strdup` e quali responsabilità ha l'utente?
La struttura `prodotto` serve a definire un prodotto con un codice, un nome, un prezzo e un numero di pezzi disponibili, consentendo di gestire informazioni relative a un articolo in modo organizzato.
La funzione `copiaProdottop` copia il contenuto di una struttura `prodotto` sorgente in una struttura destinazione, duplicando la stringa `nome` tramite la funzione `strdup`, che alloca memoria per la nuova stringa.
La funzione `strdup` crea una copia di una stringa in una nuova posizione di memoria, restituendo un puntatore alla stringa duplicata. L'utente è responsabile di liberare la memoria allocata quando non è più necessaria.