len might need to be shorter in strncpy(addr, ptr, len);
I got something like this:
(gdb) p ptr
$2 = 0xbfffee61 "95.251.46.206\004\b\b"
(gdb) p len
$3 = 256
This results in it showing garbage in the output:
$ ./ipfiy
95.251.46.206:
or
$ ./ipfiy
95.251.46.206m