Странное поведение inet_ntoa - PullRequest
0 голосов
/ 31 мая 2011

Я играл с libpcap и обнаружил странную вещь.

Одна часть вывода: "From: src_addr, To: dst_addr"

Если я печатаю с одним оператором, то есть printf ("From:% s, To:% s \ n", inet_ntoa (ip_hdr-> ip_src), inet_ntoa (ip_hdr-> ip_dst));Напечатанный dst_addr точно такой же, как напечатанный src_addr.Однако, когда я устанавливаю точку останова в этой строке и использую gdb для проверки значений, хранящихся в ip_src и ip_dst, они различаются.

Если записано в двух инструкциях, то есть printf ("From:% s,", inet_ntoa (ip_hdr-> ip_src));printf ("Кому:% s \ n", inet_ntoa (ip_hdr-> ip_dst));Затем проблема исчезла, и src_addr и dst_addr в выходных данных отличаются.

1 Ответ

0 голосов
/ 24 июня 2011

Я сталкивался с тем же, и это потому, что функция использует статический буфер. Более подробное объяснение можно найти в проблеме inet_ntoa (см. Третий пост).

...