Я разрабатываю программу клиент-сервер, и когда я пытаюсь реализовать пользовательский связанный список, используя эту структуру:памяти код распределения ошибок
typedef struct user {
char username[50];
int user_pid;
struct user *next;
} user_list;
Я пытаюсь выяснить, что случилось с кода, потому что компилятор не дает мне никакой ошибки, но когда я пытаюсь распечатать список пользователей, он просто ничего не отображает.
функция AddUser:
AddUser(user_list *head, req req)
{
if(head == NULL)
{
head = malloc(sizeof(user_list));
if (head == NULL)
fprintf(stdout,"[SERVER] Error memory allocation ");
strcpy(head->username, req.str);
head->user_pid = req.client_pid;
head->next = NULL;
}
else
{
user_list *current = head;
while (current->next != NULL)
current = current->next;
current->next = malloc(sizeof(user_list));
strcpy(current->next->username, req.str);
current->next->user_pid = req.client_pid;
current->next->next = NULL;
}
num_users++;
}
Основные функции (короткая версия)
int Main()
{
struct request req;
struct answer ans;
user_list *head = NULL;
do{
read(fifo_1, &req, sizeof(req)); // Read client request
if(strcasecmp(req.str, "adduser") == 0)
{
AddUser(head, req);
strcpy(ans.str, "User added with success! You're logged!");
}
if(strcasecmp(req.str, "users") == 0) // Print on the screen the users list
{
user_list *current = head;
while (current != NULL)
{
fprintf(stdout, "%s\n", current->username);
fprintf(stdout, "%d\n", current->user_pid);
current = current->next;
}
}
}while(strcmp(req.str,"exit") != 0);
}
@pzaenger мой плохой, я написал эту часть, чтобы показать здесь, и я забыл. Я уже редактировал сообщение. –
Переменная 'head' функции' main' не обновляется в AddUser. Вам нужно передать ссылку на указатель или указатель на указатель, чтобы иметь возможность обновлять внутреннюю часть и отображать ее снаружи. Используйте это: 'void AddUser (user_list * & head, req req)' или 'void AddUser (user_list ** head, req req)' – NetVipeC
'int Main()' тоже не является обычным C (C чувствителен к регистру и это 'int main()'). Пожалуйста, просмотрите, как создать MCVE ([Минимальный, полный, проверенный пример] (http://stackoverflow.com/help/mcve)) или SSCCE ([Short, Self-Contained, Correct Example] (http: // sscce .org /)) - два имени и ссылки для одной и той же базовой идеи. Это поможет вам лучше, чем не компилируемый код. Вам нужно проверить ошибку 'read()' call. –