В следующем коде я не могу понять, насколько я должен использовать тот же результат (то есть то же имя) при запуске метода dump_data() после добавления 2 (или более) User_struct (с разными именами) с помощью метода addUser().Динамически распределенный список динамически выделяемых структур переписывается
struct Friends_struct {
struct User_struct *this;
struct Friends_struct *next;
};
typedef struct Friends_struct *Friends;
typedef struct User_struct {
const char *name;
Friends amigos;
} User;
static User **userList; // global table of users
static int numUsers; // global number of users
static int tableSize; // global size of table
void create_amigonet() {
tableSize = INIT_TABLE_SIZE;
numUsers = 0;
userList = malloc(tableSize * sizeof(User *));
}
void addUser(const char *name) {
userList[numUsers] = malloc(sizeof(User));
userList[numUsers]->name = name;
userList[numUsers]->amigos = 0;
numUsers++;
if (numUsers == tableSize) {
tableSize += INIT_TABLE_SIZE;
User **moreUsers;
moreUsers = realloc(userList, tableSize * sizeof(User *));
userList = moreUsers;
}
}
void dump_data() {
for (int i=0; i<numUsers; i++) {
printf("%s; friends:", userList[i]->name);
}
printf("\n");
}
Различные .c файл:
void do_add(const char *name) {
addUser(name);
}
int main(void) {
create_amigonet();
do_add("Dan");
do_add("Jim");
dump_data();
}
Если это выполняется, то выход я ожидал бы что-то вроде
Dan; friends:
Jim; friends:
пока я получаю
Jim; friends:
Jim; friends:
Как/где я переписываю свои данные?
Не компилируется. Когда я исправляю ошибки компиляции, он работает так, как ожидалось. 'userList [numUsers] -> amigos = 0;' неверно. amigos - это структура 'Friends', которую вы не можете присвоить ей значение 0. Также dumpData или dump_data? –
1) 'userList [numUsers] -> amigos = 0;' -> 'userList [numUsers] -> amigos = (Друзья) {0};' 2) 'void dump_data() {' -> 'void dumpData() {'then [DEMO] (http://ideone.com/lDSs6j) – BLUEPIXY
возможно, используя ввод с консоли в отличие от опубликованного кода. – BLUEPIXY