Socket的实例化神秘地改变了C String的值。

时间:2013-10-01 16:32:53

标签: c networking

我有这段代码

 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)之后出现。现在,代码有效。当点击inet_addr行时,ip_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的值?

0 个答案:

没有答案