Ciao a tutti,
Sto cercando di costruire una semplice rubrica basata su un vettore di tipo struttura.
Funziona tutto correttamente, tranne il fatto che gli inserimenti attraverso le scanf() all'interno di un loop for clonano tutto il vettore
con l'ultimo inserimento eseguito.... (provare per credere)
Perchè succede questo???
ecco il listato:
codice:
#include<stdio.h>
#include<stdlib.h>
#define MAXV 10
main()
{
int i;
char name[50];
char phone[50];
struct rubrica /* definisco la struttura */
{
char *nome;
char *telefono;
};
struct rubrica miarubrica[MAXV], *p_rubrica; /* istanzio un vettore tipo rubrica e un puntatore tipo rubrica */
p_rubrica = miarubrica; /* assegno il puntatore alla prima componente */
for (i = 0; i< MAXV; i++) {/* popolo il vettore con tutti record uguali */
(p_rubrica+i)->nome ="Pippo";
(p_rubrica+i)->telefono = "0123456789";
}
(p_rubrica+4)->nome = "Pluto"; /* esegue una modifica alla componente di posizione 5*/
(p_rubrica+4)->telefono ="00000";
for (i = 0; i < MAXV; i++){ /* loop per la popolazione ciclica, partendo dalla componente 0 in avanti */
printf("Rec %d\tNome:\tTelefono:",i);
scanf("%s %s",name,phone);
(p_rubrica+i)->nome = name;
(p_rubrica+i)->telefono = phone;
}/* perchè il vettore si popola con tutte copie dell'ultimo inserimento ?????? */
for (i = 0; i < MAXV; i++) /* loop per l'output */
printf("Siamo al n. %d: nome: %s telefono: %s\n", i, (p_rubrica+i)->nome, (p_rubrica+i)->telefono); /* ecco repplicata sempre l'ultima riga in ogni componente del vettore */
}
Ho provato ache con altri metodi, usando gli indici al posto dei puntaori, a copiare l'intera struttura in una componente di un analogo vettore struttura, il risultato non cambia. Da notare che solo i membri di tipo stringa sono tutti uguali all'ultimo inserimento , un eventuale intero all'interno della struttura manterrebbe il valore assengato.
Cos'è che sbaglio???