gpt4 book ai didi

c - accept() 套接字系统调用中的 "lvalue required as unary ' & ' operand"

转载 作者:太空狗 更新时间:2023-10-29 15:14:24 25 4
gpt4 key购买 nike

我正在编写一个网络程序,在服务器部分,我想使用监听套接字接受来自多个客户端的连接。所以我声明了一个地址结构数组,如下所示:

struct sockaddr_in* client;

我使用 malloc 和后来创建的,接受我输入的连接:

newsock = accept(fd_skt, (struct sockaddr *)&client[i], &(sizeof(client[i])));

我从编译器那里得到 "lvalue required as unary '&' operand"。谁能找出我做错了什么?

最佳答案

是的,您不能获取不是左值 的地址,即具有地址的对象。 sizeof 运算符的结果只是一个值,它不是具有地址的对象。

您需要创建一个局部变量以便获取它的地址。

例如

socklen_t addrlen = sizeof client[i];
newsock = accept(fd_skt, (struct sockaddr *)&client[i], &addrlen));

顺便说一句,struct sockaddr_in* client; 声明了一个指针,而不是数组。要将 client 用作数组,您需要在调用 accept 之前的某个时刻将其分配给动态分配的数组。当您说“我使用 malloc 创建”时,我假设这就是您正在做的事情。

或者,您实际上可以将 client 声明为数组。

struct sockaddr_in client[MAX_CLIENTS];

关于c - accept() 套接字系统调用中的 "lvalue required as unary ' & ' operand",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6236778/

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