具有struct参数的函数及其内部对象
我努力解决我的问题,但没有成功 我不知道如何实现正确的函数具有struct参数的函数及其内部对象,c,pointers,struct,member,unions,C,Pointers,Struct,Member,Unions,我努力解决我的问题,但没有成功 我不知道如何实现正确的函数iphost() 我有一个文件library.h文件,其中存储变量和函数iphost() 还有另一个名为main.c的文件,我在其中运行函数iphost(…) 我真的不知道如何解决我的问题 我得到错误adr\u srvr没有元素sin\u addr /home/user/Desktop/pap_lab2/2/biblioteka.h|23|error: request for member ‘sin_addr’ in something
iphost()
我有一个文件library.h文件,其中存储变量和函数iphost()
还有另一个名为main.c
的文件,我在其中运行函数iphost(…)
我真的不知道如何解决我的问题
我得到错误adr\u srvr
没有元素sin\u addr
/home/user/Desktop/pap_lab2/2/biblioteka.h|23|error: request for member ‘sin_addr’ in something not a structure or union|
理解代码没有什么帮助:我无法访问adr\u srvr.sin\u addr.
char*arg是我输入的参数,4示例:“127.0.0.1”。
adr_srvr.sin_addr存储此127.0.0.1
srvr\u addr是char*
正常工作的代码是main.c中的(没有functon):
int main (int argc, char *argv[] )
{
int z;
int x;
char *srvr_addr;
struct sockaddr_in adr_srvr;
struct sockaddr_in adr;
struct hostent *he;
int len_inet;
int s;
char dgram[512];
struct in_addr **addr_list;
char buf[512];
//USTAWIENIE POLACZENIA
//CZY WPISANO IP
if(argv[1][0]>=(char)'0' && argv[1][0]<=(char)'9')
{
printf("Prawdopodobnie wprowadzono IP: %s\n", argv[1]);
inet_aton(argv[1], &adr_srvr.sin_addr);
srvr_addr = inet_ntoa(adr_srvr.sin_addr);
} else {}
...
}
#包括
- 这就是结构定义中的sockaddru所在的位置
#include <arpa/inet.h>
#包括
#包括
- 这就是结构定义中的sockaddru所在的位置
#include <arpa/inet.h>
#包括
adr\u srvr
是一个指针。要访问其字段,您需要使用adr\u srvr->sin\u addr
而不是adr\u srvr.sin\u addr
/home/user/Desktop/pap_lab2/2/biblioteka.h|23|error: request for member ‘sin_addr’ in something not a structure or union|
通常,当
a
是结构时,使用a.field
;当a
是指向结构的指针时,使用a.field
。adr\u srvr
是指针。要访问其字段,您需要使用adr\u srvr->sin\u addr
而不是adr\u srvr.sin\u addr
/home/user/Desktop/pap_lab2/2/biblioteka.h|23|error: request for member ‘sin_addr’ in something not a structure or union|
通常,当
a
是一个结构时,使用a.field
,当a
是一个指向结构的指针时,使用a.field
。在中有一个指向struct sockaddr\u的指针,因此必须取消引用它。将代码更改为以下内容:
void iphost(char* arg,struct sockaddr_in *adr_srvr)
{
if(*arg>=(char)'0' && *arg<=(char)'9')
{
printf("Prawdopodobnie wprowadzono IP: %s\n", arg);
inet_aton(arg, &(adr_srvr->sin_addr));
srvr_addr = inet_ntoa(adr_srvr->sin_addr);
}
}
void iphost(char*arg,结构sockaddr\u in*adr\u srvr)
{
如果(*arg>=(char)'0'&&&*argsin_addr));
srvr\u addr=inet\u ntoa(adr\u srvr->sin\u addr);
}
}
您在
中有一个指向结构sockaddr\u的指针,因此必须取消对它的引用。将代码更改为以下内容:
void iphost(char* arg,struct sockaddr_in *adr_srvr)
{
if(*arg>=(char)'0' && *arg<=(char)'9')
{
printf("Prawdopodobnie wprowadzono IP: %s\n", arg);
inet_aton(arg, &(adr_srvr->sin_addr));
srvr_addr = inet_ntoa(adr_srvr->sin_addr);
}
}
void iphost(char*arg,结构sockaddr\u in*adr\u srvr)
{
如果(*arg>=(char)'0'&&&*argsin_addr));
srvr\u addr=inet\u ntoa(adr\u srvr->sin\u addr);
}
}
是的,这肯定是个问题:
inet_aton(arg, &adr_srvr.sin_addr);
因为您的函数签名是:
void iphost (char* arg, struct sockaddr_in *adr_srvr)
// ^
// |
// +- see here
这意味着adr\u srvr
是指针而不是结构
您应该使用:
inet_aton (arg, &(adr_srvr->sin_addr));
srvr_addr = inet_ntoa (adr_srvr->sin_addr);
是的,这肯定是一个问题:
inet_aton(arg, &adr_srvr.sin_addr);
因为您的函数签名是:
void iphost (char* arg, struct sockaddr_in *adr_srvr)
// ^
// |
// +- see here
这意味着adr\u srvr
是指针而不是结构
您应该使用:
inet_aton (arg, &(adr_srvr->sin_addr));
srvr_addr = inet_ntoa (adr_srvr->sin_addr);
尝试inet_aton(arg,&(adr_srvr->sin_addr))代码>srvr\u addr=inet\u ntoa(adr\u srvr->sin\u addr)代码>尝试inet\u aton(arg,&(adr\u srvr->sin\u addr))代码>srvr\u addr=inet\u ntoa(adr\u srvr->sin\u addr)代码>@Michal Mokrzycki::你的意思是包含?@Michal Mokrzycki::你的意思是包含?谢谢你的帮助@paxdiablo@Sylvain@interjay,但在将点更改为箭头后,我得到了类型不完整的差异指针。我是否应该认为这可能是因为在我的库中声明。h开始时:adr_srvr;中的struct struct sockaddr_?编辑:有效:)我在我的库中加入了@adirau的库,而不是main。我真的不知道为什么……edit2:好吧,我知道,我的图书馆是第一次收录的。谢谢大家:)我有类似的问题。在您上面编写的函数中,*adr\u srvr中有一个结构sockaddr\u。如何将内容保存到adr\u srvr.sin\u端口?我试过这样做&(adr\u srvr->sin\u port)=htons(xxx),但我知道这是错误的。提前谢谢。我在哪里能读到关于做那样的事情的书?也许我应该写:adr\u srvr->sin\u port=htons(xxx),但在此之后,我无法发送消息。我认为这是导致adr_srvr的原因…感谢@paxdiablo@Sylvain@interjay的帮助,但在将点更改为箭头后,我得到了类型不完整的差异指针。我是否应该认为这可能是因为在我的库中声明。h开始时:adr_srvr;中的struct struct sockaddr_?编辑:有效:)我在我的库中加入了@adirau的库,而不是main。我真的不知道为什么……edit2:好吧,我知道,我的图书馆是第一次收录的。谢谢大家:)我有类似的问题。在您上面编写的函数中,*adr\u srvr中有一个结构sockaddr\u。如何将内容保存到adr\u srvr.sin\u端口?我试过这样做&(adr\u srvr->sin\u port)=htons(xxx),但我知道这是错误的。提前谢谢。我在哪里能读到关于做那样的事情的书?也许我应该写:adr\u srvr->sin\u port=htons(xxx),但在此之后,我无法发送消息。我认为这会导致adr\u srvr。。。