PDA

View Full Version : [C]Stampa elementi di una lista


Nagashi890
08-02-2013, 15:02
Ciao a tutti! sto lavorando al progetto di un'applicazione distribuita client/server e mi sono bloccato su un problema stupido ma che mi impedisce di andare avanti..
Lato server, devo ricevere il nome indentificativo dei client che si connettono al server e inserirli in una lista. Ho dunque implementato la lista su un file separato in questo modo:


#include <stdlib.h>
#include <stdio.h>
#include <string.h>

struct client {
char* nome;
struct client* next;
};

struct client* testa = NULL;
struct client* coda = NULL;

void add(char* nome) {
struct client* nuovo;
nuovo = (struct client*)malloc(sizeof(struct client));
nuovo->nome = nome;
nuovo->next = NULL;
if(testa == NULL) {
testa = nuovo;
} else {
coda->next = nuovo;
}
}


void stampa() {
struct client* p;
p = testa;
while(p != NULL) {
printf("%s\n", p->nome);
p = p->next;
}
}

E poi la utilizzo in questo modo:
ovviamente non posto tutto il codice del server, ma solo la parte relativa all'utilizzo della lista:

memset(rcvbuff, 0, sizeof(rcvbuff)); //pulitura buffer
ret = recv(c_sk, (void*)rcvbuff, sizeof(rcvbuff), 0);
if(ret == -1) {
perror("Server receive error!");
exit(1);
}
add(rcvbuff);
stampa();


Eseguendo il server e facendo collegare un client, mi stampa giustamente un solo elemento della lista col nome del client. Se faccio collegare un altro client, mi vengono stampati due elementi con lo stesso nome relativo all'ultimo client connesso..
Come mai accade ciņ? come mai viene perso il nome del primo client connesso? non riesco a trovare l'errore..
Grazie!!

Nagashi890
08-02-2013, 21:28
Ok! scusate ho risolto! ho cambiato la struttura definendo la dimensione dell'array e ho usato la strcpy(nuovo->nome, nome) per copiare il nome del client nel corrispondente elemento della struttura.. scusate ancora! xD