First I really doubt that you are using Linux because of the "conio.h", but well. Then why are you redefining the "struct in6_addr"?
For expanding the IPV6 address, after some googling you should find that :
Code:
sprintf(buf, "%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x",
(int)ipv6.s6_addr[0], (int)ipv6.s6_addr[1],
(int)ipv6.s6_addr[2], (int)ipv6.s6_addr[3],
(int)ipv6.s6_addr[4], (int)ipv6.s6_addr[5],
(int)ipv6.s6_addr[6], (int)ipv6.s6_addr[7],
(int)ipv6.s6_addr[8], (int)ipv6.s6_addr[9],
(int)ipv6.s6_addr[10], (int)ipv6.s6_addr[11],
(int)ipv6.s6_addr[12], (int)ipv6.s6_addr[13],
(int)ipv6.s6_addr[14], (int)ipv6.s6_addr[15]);
I guess that then for the incrementation you can use the in6_addr struct also, for example you start by incrementing the last part of the address, and if it gives 0 then you increment the next one...