nikpez
Ominide
1 min. di lettura
Vota 5 / 5

Concetti Chiave

  • La struttura 'prodotto' è definita con campi per codice, nome, prezzo e numero di pezzi.
  • La funzione 'copiaProdottop' copia il contenuto di una struttura 'prodotto' in un'altra, duplicando la stringa 'nome'.
  • La destinazione della copia viene passata per indirizzo, mentre la sorgente viene passata per valore.
  • La funzione 'strdup' è utilizzata per duplicare la stringa 'nome', allocando spazio dinamicamente con 'malloc'.
  • La funzione 'strdup' restituisce un puntatore alla stringa duplicata o null se l'allocazione di spazio non riesce.
Esercizo C - Funzioni,stringhe e allocazione dinamica

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);
}

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.
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 e risposte

Hai bisogno di aiuto?
Chiedi alla community