这两行在gdb
中产生以下输出。请注意,两个临时字符串first_str
和second_str
的地址具有相同的地址。这是为什么?临时C字符串具有相同的地址
char *first_str = inet_ntoa(first->dest);
char *second_str = inet_ntoa(second->dest);
(gdb) p first_str
$3 = 0x7ffff7ff06d8 "54.208.71.98"
(gdb) p second_str
$4 = 0x7ffff7ff06d8 "54.208.71.98"
first->dest
和second->dest
包含不同的值。
这是因为这些函数不可重入,inet_ntoa使用静态或全局内部缓冲区。你应该使用inet_ntop。 – goji
确实'inet_ntoa'承诺不这样做?也许你必须解决 –