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

  1. Qual è la funzione principale della struttura `prodotto` definita nel codice?
  2. 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.

  3. Come funziona la funzione `copiaProdottop` e quale è il suo scopo?
  4. 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.

  5. Qual è il comportamento della funzione `strdup` e quali responsabilità ha l'utente?
  6. 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.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community