У меня есть сервер-клиентская программа, которую я могу добавить или удалить. Когда достигнут максимальный номер пользователя (10), у меня есть ошибка при удалении одного из пользователей.memset clearing, что это не предполагается
Вот часть функции, которая удаляет пользователя:
int i;
int confirmacao = 0;
msg_t msg;
char cliname[10];
if (strlen(estrutura.id) == 3) {
for (i = 0; memoria->x[i].id[0] != '\0'; ++i) {
if (strcmp(estrutura.id, memoria->x[i].id) == 0) {
confirmacao = 1;
for (; memoria->x[i].id[0] != '\0'; ++i) {
memoria->x[i] = memoria->x[i + 1];
}
// I think the problem is with this memset
memset(memoria->x[i].id, '\0', sizeof(memoria->x[i].id));
printf("IA antes de decrementar: %i\n", memoria->ia);
memoria->ia--;
printf("Ia depois: %i\n", memoria->ia);
break;
}
}
} else {
...
}
memoria-> НМА suposed быть уменьшен на единицу, и я могу понять, почему MemSet является установка его до нуля.
Memoria глобальный указатель на эту структуру:
typedef struct mmap_uti_s {
uti_t x[NUTI];
int ia;
} mmap_uti_t;
и uti_t эта структура:
typedef struct uti_s {
char id[NDIG + 1];
char nome[NDIM + 1];
char portas[NPOR + 1];
} uti_t;
Tank вы очень бы принять возрастов для меня, чтобы обнаружить, что! –
Он работает так, как вы сказали, но, подумав об этом, если я сделаю так, если массив будет заполнен, то в последнем цикле он будет выполнять «memoria-> x [9] = memoria-> x [10]; ведьма не существует. Или я ошибаюсь? –
Я думаю, что это должно быть 'i + 2' для условия, а затем' i + 1' в memset –