zoukankan      html  css  js  c++  java
  • 一个关于inet_ntoa的奇怪问题

    无意中发现一个inet_ntoa函数的奇怪问题。

    #include <winsock2.h>
    #include 
    <stdio.h>

    #pragma comment( lib, "ws2_32.lib" )

    struct sockaddr_in server_addr;
    struct sockaddr_in client_addr;

    int main(void)
    {
        
    long a = 0x102030FF;
        
    long b = 0x405060FF;

        memcpy((
    char *)&server_addr.sin_addr, (char *)&a, sizeof(server_addr.sin_addr));
        memcpy((
    char *)&client_addr.sin_addr, (char *)&b, sizeof(client_addr.sin_addr));

        printf(
    "server:%s\n", inet_ntoa(server_addr.sin_addr));
        printf(
    "client:%s\n", inet_ntoa(client_addr.sin_addr));

        printf(
    "server:%s\nclient:%s\n",
            inet_ntoa(server_addr.sin_addr), inet_ntoa(client_addr.sin_addr));

        printf(
    "server:%s\nclient:%s\n",
            inet_ntoa(client_addr.sin_addr), inet_ntoa(server_addr.sin_addr));

        
    return 0;
    }

    运行结果如下

    server:255.48.32.16
    client:255.96.80.64
    server:255.48.32.16
    client:255.48.32.16
    server:255.96.80.64
    client:255.96.80.64

    分别打印server和client的地址,得到正确的值,但是使用同一条printf语句打印却出现错误。

    其中的原因是inet_ntoa返回值存储在一块静态空间中,第二次调用的返回值会覆盖第一次的结果,printf的是从右往左计算参数,所以会出现打印相同地址的情况。

  • 相关阅读:
    使用ant部署web项目
    搭建ant环境
    Myeclipse8.5,9.0安装svn插件
    自定义任务扩展 ANT
    使用jmeter测试 webservice
    随机数猜1-9的数字
    线性表
    显示所有线性元素
    新学到的继承链
    计算圆
  • 原文地址:https://www.cnblogs.com/faraway/p/1423477.html
Copyright © 2011-2022 走看看