gpt4 book ai didi

c - 具有结构参数及其内部对象的函数

转载 作者:太空宇宙 更新时间:2023-11-04 05:45:50 24 4
gpt4 key购买 nike

我搜索了我的问题,但没有成功

我不知道如何实现正确的函数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|

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 ?

对理解代码帮助不大:
我无法访问 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");

}

最佳答案

adr_srvr 是一个指针。要访问其字段,您需要使用 adr_srvr->sin_addr 而不是 adr_srvr.sin_addr

一般来说,当a是一个struct时使用a.field,当a时使用a->field > 是指向结构的指针。

关于c - 具有结构参数及其内部对象的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5459638/

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