带有结构体参数的函数及其内部对象
我搜索了我的问题,但没有成功,
我不知道如何实现正确的函数iphost()
。
好吧,我有文件library.h 文件,其中存储变量和函数iphost()
。
还有另一个名为 main.c
的文件,我在其中运行函数 iphost(...)
。
我真的不知道如何解决我的问题。
我收到错误 adr_srvr
没有元素 sin_addr
。
/home/user/Desktop/pap_lab2/2/biblioteka.h|23|error: request for member ‘sin_addr’ in something not a structure or union|
可能我用星号指针和&符号声明了错误的参数。有人可以帮助我吗?
library.h
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);//here ERROR
srvr_addr = inet_ntoa(adr_srvr.sin_addr);
}
}
main.c
iphost(argv[2], &adr_srvr); // OK ?
对理解代码没什么帮助:
我无法访问 adr_srvr.sin_addr。
char* arg 是我输入的参数,4example: "127.0.0.1".
adr_srvr.sin_addr 存储此 127.0.0.1
srvr_addr 是 char*
可以正常工作的正常代码是(没有函数)在 main.c 中:
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 {}
...
}
---------
我有类似的问题,所以我在这里编辑。我怎样才能在函数中实现这个?:
else
{
if ((he = gethostbyname(arg)) == NULL) { // get the host info
herror("gethostbyname");
return 2;
}
// print information about this host:
printf("Wykryty HOST: '%s' ", arg);
printf("zamieniam na IP: ");
addr_list = (struct in_addr **)he->h_addr_list;
printf("%s", srvr_addr = inet_ntoa(*addr_list[0]));
printf("\n");
}
I searched with my problem but with no success
I do not know how to implement proper function iphost()
.
Well I have file library.h file in which I store variables and function iphost()
.
There is another file called main.c
where I run function iphost(...)
.
I really do not know how to fix my problem.
I got error adr_srvr
doesn't have element sin_addr
.
/home/user/Desktop/pap_lab2/2/biblioteka.h|23|error: request for member ‘sin_addr’ in something not a structure or union|
Probably I declared wrong arguments with that stars pointers and ampersands. Can anybody help me?
library.h
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);//here ERROR
srvr_addr = inet_ntoa(adr_srvr.sin_addr);
}
}
main.c
iphost(argv[2], &adr_srvr); // OK ?
Little help to undestand the code:
I cannot get to adr_srvr.sin_addr.
char* arg is arguments inputing by me, 4example: "127.0.0.1".
adr_srvr.sin_addr store this 127.0.0.1
srvr_addr is char*
The normal code which works okay is (without functon) in main.c :
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 {}
...
}
---------
I have similar question so I edit here. How can I implement this in function?:
else
{
if ((he = gethostbyname(arg)) == NULL) { // get the host info
herror("gethostbyname");
return 2;
}
// print information about this host:
printf("Wykryty HOST: '%s' ", arg);
printf("zamieniam na IP: ");
addr_list = (struct in_addr **)he->h_addr_list;
printf("%s", srvr_addr = inet_ntoa(*addr_list[0]));
printf("\n");
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
adr_srvr
是一个指针。要访问其字段,您需要使用adr_srvr->sin_addr
而不是adr_srvr.sin_addr
。一般来说,当
a
是结构体时,使用a.field
;当a
是结构体时,使用a->field
指向结构的指针。adr_srvr
is a pointer. To access its fields, you need to useadr_srvr->sin_addr
instead ofadr_srvr.sin_addr
.In general, use
a.field
whena
is a struct, anda->field
whena
is a pointer to a struct.是的,这肯定是一个问题:
因为您的函数签名是:
这意味着 adr_srvr 是一个指针而不是结构。
您应该使用:
Yes, this most certainly is a problem:
Because your function signature is:
this means that
adr_srvr
is a pointer rather than a structure.You should be using:
这就是inet_aton 签名的
for the inet_aton signature:
您有一个指向 struct sockaddr_in 的指针,因此您必须取消引用它。将您的代码更改为以下内容:
You have a pointer to a
struct sockaddr_in
, so you have to dereference it. Change your code to the following: