您的位置:首页 > 理论基础 > 计算机网络

inet_ntoa()多次调用时的问题

2015-08-31 16:52 495 查看
本文转自http://blog.chinaunix.net/uid-25203957-id-372797.html,作者:crazyhadoop

崩溃,一个inet_ntoa()函数的自身特性害的我调试了半天程序。

inet_ntoa函数就是将IP无符号整形转换成IP字符串,函数返回的是指向IP字符串的一个指针,乍看没什么问题。门道就在返回的这个字符串上。这个字符串是在其内部静态分配的,后面的每次调用都会覆盖上一次的值。

因此,每次使用过后要备份数据,才能继续调用。

struct in_addr saddr,daddr;

saddr.s_addr=1.2.3.4;

daddr.s_addr=2.3.4.5;

printf("%s : %s\n",
inet_ntoa(saddr), inet_ntoa(daddr));

则结果都是 "1.2.3.4 : 1.2.3.4" —— printf 从右向左求值,daddr 先求的2.3.4.5被 1.2.3.4覆盖。用的同一块内存。

但是如果把printf 分为两行打印就没有问题了,分别求值,每段数据都可以重新赋值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux c++ 网络编程