inet_ntoa()多次调用时的问题

36 篇文章 0 订阅

本文转自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 分为两行打印就没有问题了,分别求值,每段数据都可以重新赋值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值