这是一个ipv6自动补全的一个算法,空间复杂度有点高
int complete_ipv6(char* ipv6, char* complete_v6)
{
char ipcom[40] = {
"0000:0000:0000:0000:0000:0000:0000:0000"};
char *tmpcomv6[128] = {
0 };
char *p = NULL, *q = NULL, *q1 = NULL;
int cnt = 0, i = 0, len = 0, l1 = 0, l2 = 0, l3 = 0, sum = 0, l1tmp = 0;
// 将IPv6地址用::分开
// 如果IPv6地址为::
// 如果不包含::或以::结尾
// 如果以::开头或::在中间
p = strchr(ipv6, '/');
if (p != NULL) {
*p = '\0';
}
p = strstr(ipv6, "::");
len = strlen(ipcom);
if (p != NULL) {
if (p == ipv6