Я (пытаюсь) написать серверный демон в c, и он принимает соединения от клиентов.Мне нужна структура, которая хранит информацию о каждом открытом соединении, поэтому я создал массив моей определенной структуры и динамически изменил ее размер с помощью realloc.
Проблема, которую я имею, заключается в создании структуры внутримассив.Я получаю эту ошибку:
test.c:41: error: conversion to non-scalar type requested
Что я делаю не так?
Я провожу большую часть своего времени в PHP, и я нуб с c.Я понимаю, что я делаю некоторые простые, начинающие ошибки (другими словами, не стесняйтесь высмеивать меня).Если я делаю что-то глупое, пожалуйста, дайте мне знать.Я потратил свое качественное время с Google, но не понял это.Я воспроизвел проблему в меньшем масштабе, как показано ниже:
вот мой test.h:
typedef struct test_ test;
и вот мой test.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "test.h"
//define the struct
struct test_ {
int id;
char *ip;
int user;
char *str;
};
//yes, the list needs to be global
test *test_list;
//
// add an item to the global list
//
int add(int id, char *ip, int size)
{
//
// increment size
if(id>size) {
size = id;
//try to expand the list
test *tmp = realloc(test_list,size);
if(tmp) {
//it worked; copy list back
test_list = tmp;
} else {
//out of memory
printf("could now expand list\n");
exit(1);
}
}
//
// HERE IS THE TROUBLE CODE::
test_list[id] = (struct test)malloc(sizeof(test)+(sizeof(int)*5)+strlen(ip)+1);
test_list[id].id = id;
test_list[id].ip = malloc(strlen(ip));
strcpy(test_list[id].ip,ip);
test_list[id].user = 0;
test_list[id].str = NULL;
}
//
// main
//
int main(void)
{
//initialize
int size = 1;
test_list = malloc(size*sizeof(test));
//add 10 dummy items
int i;
for(i=0; i<10; i++) {
size = add(i, "sample-ip-addr", size);
}
//that's it!
return 0;
}