inet_ntoa使用时要注意
2011-09-26 17:03
225 查看
in_addr t1,t2;
t1.S_un.S_addr=1;
t2.S_un.S_addr=2;
char *p1=inet_ntoa(t1);
char *p2=inet_ntoa(t2);
这样你只能的得到2个相同的结果
因为它们用的是同一块空间。
解决办法是每次调用后都把值考走
如:
char p1[20]={0};
strcpy(p1,inet_ntoa(t1));
这样处理就没问题了
inet_ntoa函数的问题 (2007-05-10 13:14)
分类: 网络编程
今天在向同学show的时候,发现了了我打印源ip和目的ip都是一样的,晕,幸亏同学都没有发现。
回来当然要改程序了。
inet_ntoa()
简述:
将网络地址转换成“.”点隔的字符串格式。
char * inet_ntoa( struct in_addr in);
in:一个表示Internet主机地址的结构。
The inet_ntoa() function converts the Internet host address in given in network byte order to a string in standard
numbers-and-dots notation. The string is returned in a statically allocated buffer, which subsequent calls will
overwrite.
返回值:
若无错误发生,inet_ntoa()返回一个字符指针。否则的话,返回NVLL。其中的数据应在下一个WINDOWS套接口调用前复制出来。
参见:
inet_addr().
测试代码如下
include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
int main(int aargc, char* argv[])
{
struct in_addr addr1,addr2;
ulong l1,l2;
l1= inet_addr("192.168.0.74");
l2 = inet_addr("211.100.21.179");
memcpy(&addr1, &l1, 4);
memcpy(&addr2, &l2, 4);
printf("%s : %s\n", inet_ntoa(addr1), inet_ntoa(addr2)); //注意这一句的运行结果
printf("%s\n", inet_ntoa(addr1));
printf("%s\n", inet_ntoa(addr2));
return 0;
}
实际运行结果如下:
192.168.0.74 : 192.168.0.74 //从这里可以看出,printf里的inet_ntoa只运行了一次。
192.168.0.74
211.100.21.179
inet_ntoa返回一个char *,而这个char *的空间是在inet_ntoa里面静态分配的,所以inet_ntoa后面的调用会覆盖上一次的调用。第一句printf的结果只能说明在printf里面的可变参数的求值是从右到左的,仅此而已。
t1.S_un.S_addr=1;
t2.S_un.S_addr=2;
char *p1=inet_ntoa(t1);
char *p2=inet_ntoa(t2);
这样你只能的得到2个相同的结果
因为它们用的是同一块空间。
解决办法是每次调用后都把值考走
如:
char p1[20]={0};
strcpy(p1,inet_ntoa(t1));
这样处理就没问题了
inet_ntoa函数的问题 (2007-05-10 13:14)
分类: 网络编程
今天在向同学show的时候,发现了了我打印源ip和目的ip都是一样的,晕,幸亏同学都没有发现。
回来当然要改程序了。
inet_ntoa()
简述:
将网络地址转换成“.”点隔的字符串格式。
char * inet_ntoa( struct in_addr in);
in:一个表示Internet主机地址的结构。
The inet_ntoa() function converts the Internet host address in given in network byte order to a string in standard
numbers-and-dots notation. The string is returned in a statically allocated buffer, which subsequent calls will
overwrite.
返回值:
若无错误发生,inet_ntoa()返回一个字符指针。否则的话,返回NVLL。其中的数据应在下一个WINDOWS套接口调用前复制出来。
参见:
inet_addr().
测试代码如下
include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
int main(int aargc, char* argv[])
{
struct in_addr addr1,addr2;
ulong l1,l2;
l1= inet_addr("192.168.0.74");
l2 = inet_addr("211.100.21.179");
memcpy(&addr1, &l1, 4);
memcpy(&addr2, &l2, 4);
printf("%s : %s\n", inet_ntoa(addr1), inet_ntoa(addr2)); //注意这一句的运行结果
printf("%s\n", inet_ntoa(addr1));
printf("%s\n", inet_ntoa(addr2));
return 0;
}
实际运行结果如下:
192.168.0.74 : 192.168.0.74 //从这里可以看出,printf里的inet_ntoa只运行了一次。
192.168.0.74
211.100.21.179
inet_ntoa返回一个char *,而这个char *的空间是在inet_ntoa里面静态分配的,所以inet_ntoa后面的调用会覆盖上一次的调用。第一句printf的结果只能说明在printf里面的可变参数的求值是从右到左的,仅此而已。
相关文章推荐
- inet_ntoa使用时要注意
- 关于inet_ntoa使用需要注意的地方
- socket 编程下 inet_ntoa() 函数的使用与注意事项
- inet_ntoa使用时要注意
- socket 编程下 inet_ntoa() 函数的使用与注意事项
- socket 编程下 inet_ntoa() 函数的使用与注意事项
- inet_ntoa 连续使用 注意事项
- inet_ntoa使用时要注意
- socket 编程下 inet_ntoa() 函数的使用与注意事项
- inet_addr()和inet_ntoa()使用注意
- inet_ntoa()使用注意事项
- 使用inet_ntop替换inet_ntoa进行网络地址到字符地址转换
- VS2013 无法使用'inet_ntoa': Use inet_ntop() or InetNtop() instead or define
- IP处理函数inet_aton()和inet_ntoa()使用说明
- 使用InetAddress 获取主机名注意!!!
- IP地址转换函数--inet_addr和inet_ntoa使用笔记
- inet_addr使用要注意的地方
- VS2015/2013 无法使用'inet_ntoa': Use inet_ntop() or InetNtop() instead or define
- 网络地址转换相关函数使用(inet_addr,inet_ntoa,inet_addr)