我有这段代码
char *ip_addr;
ip_addr=(char*)malloc(10);
ip_addr=getIPAddress(ip_addr);
/*
* Create a UDP socket to use:
*/
s = socket(AF_INET,SOCK_DGRAM,0);
if ( s == -1 )
displayError("socket()");
memset(&adr_srvr, 0, sizeof(adr_srvr));
adr_srvr.sin_family=AF_INET;
adr_srvr.sin_addr.s_addr= inet_addr(ip_addr);
adr_srvr.sin_port=htons(3000);
len_srvr = sizeof(adr_srvr);
bzero(&(adr_srvr.sin_zero), 8);
我从 getIPAddress 函数检查 ip_addr 是否有效,但是当代码到达 adr_srvr.sin_addr.s_addr= inet_addr(ip_addr) 时,ip_addr 变为 NULL!
我继续调试并在 s = socket(AF_INET,SOCK_DGRAM,0) 行中归零错误。因此我修改了代码以使其工作。我使套接字函数位于 inet_addr(ip_addr) 之后。现在,代码可以工作了。ip_addr 在命中 inet_addr 行时有效。
char *ip_addr;
ip_addr=(char*)malloc(10);
ip_addr=getIPAddress(ip_addr);
memset(&adr_srvr, 0, sizeof(adr_srvr));
adr_srvr.sin_family=AF_INET;
adr_srvr.sin_addr.s_addr= inet_addr(ip_addr);
adr_srvr.sin_port=htons(3000);
len_srvr = sizeof(adr_srvr);
bzero(&(adr_srvr.sin_zero), 8);
/*
* Create a UDP socket to use:
*/
s = socket(AF_INET,SOCK_DGRAM,0);
if ( s == -1 )
displayError("socket()");
这是非常奇怪的事情发生。任何人都知道为什么 Socket 函数会影响 ip_addr 的值?