{}
не означает «ноль», это означает «инициализированный нулем».
Нельзя помещать нулевые значения в массив client
, поскольку client
- это массив структур, а структуры не могут быть нулевыми. Если вы хотите, чтобы массив client
мог содержать «нулевые» значения, вам нужно сделать его массивом указателей на структуры , например, Client* client[max_connection] = {};
. Это устанавливает все значения в client
в NULL
, потому что, когда речь идет об указателях, 0
и NULL
являются синонимами. Когда указатели не задействованы, это не так, потому что ничто, кроме указателя, не может быть нулевым.
Обратите внимание, что поскольку client
теперь будет содержать указатели, вам придется распределять и освобождать структуры Client
с помощью malloc
и free
, например,
if(client[new_fd-4] == NULL) { // if fist attempt, client always null
client[new_fd-4] = malloc(sizeof(Client));
client[new_fd-4]->no_login = 1; // For example. Note use of -> instead of .
}
И когда вы закончите с каким-то элементом client[i]
:
free(client[i]);
client[i] = NULL; // Not strictly necessary, but a good idea
И я действительно сомневаюсь, что вы хотите сделать это:
// I want to setting client[new_fd-4].ip = &remoteIP
Я думаю, что вы действительно хотите скопировать данные, содержащиеся в remoteIP
, в элемент ip
, например:
memcpy(client[new_fd-4]->ip, &remoteIP, INET6_ADDRSTRLEN);