c - 在 Main 中动态分配结构体数组,然后为其分配函数

标签 c arrays dynamic struct calloc

我正在为一个项目构建一个服务器,我需要以有序的方式存储一堆值。我已经搜索了好几个小时了,但我还不知道如何找到。

我构建了一个结构,如下所示:

struct WHITEBOARD{
    int line;
    char type;
    int bytes;
    char string[1024];  
} *Server;

然后在我的主函数中,我想动态分配内存以创建一个大小为 [argv[1]] 的 WHITEBOARD 结构数组(最终)。我想使用 calloc,在我的研究中我发现了以下内容:

void main()
{
    struct whiteboard (*Server) = (struct whiteboard*) calloc(10, sizeof(*Server));
    (*Server).line = 2;
    printf("Test: %d\n",(*Server).line);
}

这可行,但我似乎不知道如何将 Server 转换为结构数组,以便我可以引用 (*Server)[1].line并从函数分配给这个堆绑定(bind)变量。我打算这样做。

char* doThing(struct whiteboard Server)
{
    (*Server)[1].line = 4;
    return;
}

并且能够从 main 打印新绑定(bind)的变量。

这可能是一个愚蠢的问题,但任何帮助都会很棒。谢谢!

最佳答案

struct WHITEBOARD{
    int line;
    char type;
    int bytes;
    char string[1024];  
} *Server;

您有一个在全局范围内名为 Server 的变量(指向 struct WHITEBOARD 的指针),因此,您不需要在 main 内重新声明它 也不在函数参数内,另请注意,您滥用了取消引用运算符 (*) 来访问 (*Server) 中的元素 1 [1].line = 4;只需使用Server[1].line = 4;

void doThing(void) /* Changed, you promise to return a pointer to char but you return nothing */
{
    Server[1].line = 4;
}

int main(void) /* void main is not a valid signature */
{
    Server = calloc(10, sizeof(*Server)); /* Don't cast calloc */

    Server[1].line = 2;
    doThing();
    printf("Test: %d\n", Server[1].line);
    free(Server);
}

关于c - 在 Main 中动态分配结构体数组,然后为其分配函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42779355/

相关文章:

c - 如何在 GtkTable 上实现按钮按下事件

Javascript 排序函数。按第一个排序,然后按第二个排序

Python拦截方法调用

javascript - 有没有办法将数组的变量名打印为字符串? (JavaScript)

javascript - 动态 iframe 高度取决于隐藏/显示

C安全地取整数的绝对值

java - 通过套接字将 int 从 Java 客户端写入到 C 服务器

c - 渲染为一维纹理

c - 数组 C 的动态内存分配

javascript - 从 reviver 访问 JSON 对象中的数组