关于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));

return0;
}

复制代码输出为:

运行结果如下

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的是从右往左计算参数,所以会出现打印相同地址的情况

posted @ 2012-08-19 11:52  SA高处不胜寒  阅读(1001)  评论(0编辑  收藏  举报