我遇到了上述错误request member rv in something not a structure of union
。我用谷歌搜索了几个答案,告诉我这是在使用指针但尝试以结构形式访问它时,我应该使用->
代替.
int foo(void * arg, struct message * msg)
{
struct fd_info * info = (struct something *) arg;
struct client * csys = info->c_sys;
int * socks[MAX_CONNECTION];
int rv;
socks = &(info->_socks); // where int * _socks[MAX_CONNECTION] in struct info
// do other things
rv = sendto(socks[i], msg, sizeof(msg), NULL, &(csys->client_address), sizeof(csys->client_address));
...
}
问题是我所有的论据都是指针。我对什么是错的感到困惑。感谢任何意见/想法。
编辑: 抱歉& msg,它最初只是消息,但在我绝望的尝试中我正在尝试的事情。 添加了rv。
的定义答案 0 :(得分:1)
msg
已经是一个指针。所以也许你应该msg
而不是&msg
,
您传递给sizeof(*msg)
的论据中sizeof(&msg)
代替sendto
?
答案 1 :(得分:1)
我看到了一些问题,但不一定是造成错误的问题。您需要提供更多代码并告诉我们错误发生的位置。
问题: 1)为什么在调用sendto()时使用& msg? msg已经是一个指针。你的意思是将指针传递给指针吗?
2)sizeof(& msg)计算指针的大小。这是你想要的,或者你想要msg指向的数据大小?
3)我对你的错误原因的猜测是csys。它是什么?它是指针还是结构?
答案 2 :(得分:0)
请你试试下面的内容。
更改以下
int * socks[MAX_CONNECTION];
到
int** socks;
*socks = &(info->_socks);
访问:
int i = *socks[index];