"在套接字系统调用中,"左值作为一元'和'操作数'需要

nik*_*kos 4 c sockets compiler-errors

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

struct sockaddr_in* client;
Run Code Online (Sandbox Code Playgroud)

我使用malloc创建,稍后,接受我键入的连接:

newsock = accept(fd_skt, (struct sockaddr *)&client[i], &(sizeof(client[i])));
Run Code Online (Sandbox Code Playgroud)

"lvalue required as unary '&' operand"从编译器那里得到了.任何人都可以弄清楚我做错了什么?

CB *_*ley 11

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

您需要创建一个局部变量,以便可以获取其地址.

例如

socklen_t addrlen = sizeof client[i];
newsock = accept(fd_skt, (struct sockaddr *)&client[i], &addrlen));
Run Code Online (Sandbox Code Playgroud)

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

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

struct sockaddr_in client[MAX_CLIENTS];
Run Code Online (Sandbox Code Playgroud)