gpt4 book ai didi

c - 动态扩展结构体数组

转载 作者:行者123 更新时间:2023-11-30 18:03:59 24 4
gpt4 key购买 nike

我正在(尝试)用c语言编写一个服务器端守护进程,它接受来自客户端的连接。我需要一个结构来保存每个打开连接的信息,因此我创建了一个我定义的结构的数组,并使用 realloc 动态调整它的大小。

我遇到的问题是在数组中创建结构。我不断收到此错误:

test.c:41: error: conversion to non-scalar type requested

我做错了什么?

我大部分时间都花在 PHP 上,并且是 c 菜鸟。我意识到我犯了一些简单的初学者错误(换句话说,请随意取笑我)。如果我做了一些愚蠢的事情,请告诉我。我已经在谷歌上投入了宝贵的时间,但还没有弄清楚。我以较小的规模重现了该问题,如下所示:

这是我的测试.h:

typedef struct 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;
}

最佳答案

尝试改变

test *tmp = realloc(test_list,size);

test *tmp = realloc(test_list,size*sizeof(test));

然后删除

test_list[id] = (struct test)malloc(sizeof(test)+(sizeof(int)*5)+strlen(ip)+1);

当您为 test_list 分配时,已经为分配的结构体的每个成员分配了空间,因此您无需再次执行此操作。您只需为结构中的任何指针分配

关于c - 动态扩展结构体数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7871041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com