#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <assert.h>
#include <sys/ioctl.h>
#include <net/if.h>
struct tokenID
{
struct in_addr subnet_addr;
struct in_addr outnet_addr;
unsigned short outnet_port;
};
int main()
{
tokenID peer;
memset(&peer, 0, sizeof(peer));
peer.outnet_addr.s_addr = inet_addr("187.49.86.238");
peer.subnet_addr.s_addr = inet_addr("192.168.20.8");
char *p1, *p2;
p1 = inet_ntoa(peer.outnet_addr);
p2 = inet_ntoa(peer.subnet_addr);
printf("p1 =%s, p2 = %s\n",p1, p2);
return 0;
问题延伸:
1.printf函数执行参数计算顺序是从右往左的
2.返回static内部变量的函数
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <assert.h>
#include <sys/ioctl.h>
#include <net/if.h>
struct tokenID
{
struct in_addr subnet_addr;
struct in_addr outnet_addr;
unsigned short outnet_port;
};
int main()
{
tokenID peer;
memset(&peer, 0, sizeof(peer));
peer.outnet_addr.s_addr = inet_addr("187.49.86.238");
peer.subnet_addr.s_addr = inet_addr("192.168.20.8");
char *p1, *p2;
p1 = inet_ntoa(peer.outnet_addr);
p2 = inet_ntoa(peer.subnet_addr);
printf("p1 =%s, p2 = %s\n",p1, p2);
return 0;
}
返回值:p1 =192.168.20.8, p2 = 192.168.20.8
原因:inet_addr函数的返回了static内存的指针,导致前面的值被后面的覆盖了
问题延伸:
1.printf函数执行参数计算顺序是从右往左的
2.返回static内部变量的函数