/*studenti2.cpp*/

// Archivio studenti con numeri di matricola.
// In questa versione decidiamo di risparmiare memoria
// allocando dinamicamente lo spazio per il nome.

#include <iostream>
#include <string.h>
using namespace std;

// La struttura contiene un punttore al nome
// e la matricola di uno studente
struct studente {
char *nome;
unsigned int matricola;
};

int main (void)
{
// Dichiaro due variabili studente
studente s1, s2;

// Il primo studente si chiama Marco e ha matricola 123456
s1.nome = new char [6];
strcpy (s1.nome, "Marco");
s1.matricola = 123456;

// Il secondo studente si chiama Mario e ha la matricola successiva.
// Alloco la quantità di memoria necessaria a contenere il nome:
s2.nome = new char [strlen(s1.nome)+1];
// Copio il nome dello studente Marco...
strcpy (s2.nome, s1.nome);
// ...modifico la 'c' in 'i'...
s2.nome[3] = 'i';
// ...e incremento la matricola.
s2.matricola = s1.matricola + 1;

// Infine stampo il risultato.
cout << s1.nome << ' ' << s1.matricola << '\n';
cout << s2.nome << ' ' << s2.matricola << '\n';

// Prima del termine del programma libero la memoria allocata
delete[] s1.nome;
delete[] s2.nome;

return 0;
}