1、inet_ntoa 的实现返回了局部变量导致同一条命令不能两次调用!
让我们大家都扪心自问一下,我们在写程序的过程当中是否使用了这种方法?这是一个比较危险,容易出错的方法。这种陷阱让人防不胜防。想想,如果你有这样的程序:
if ( strcmp( inet_ntoa(ip1), inet_ntoa(ip2) )==0 ) {
…. ….
}
本想判断一下两个IP地址是否一样,却不料掉入了那个陷阱——让这个条件表达式永真。
这个事情告诉我们下面几个道理:
1)慎用这种方式的设计。返回函数内部的static内存有很大的陷阱。
2)如果一定要使用这种方式的话。你就必须严肃地告诉所有使用这个函数的人,千万不要在一个表达式中多次使用这个函数。而且,还要告诉他们,不copy函数返回的内存的内容,而只是保存返回的内存地址或是引用是没用的。不然的话,后果概不负责。
3)C/C++是很危险的世界,如果你不清楚他的话。还是回火星去吧。
奋斗为了更好的生活。
浙公网安备 33010602011771号