Мне нужен второй столбец в ipv6. (2001: 1234: asdd: xeed: 212: 4b00: 61) -> (4b0061) также мне нужно знать, как освободить этот возврат функции ipv6_parser.Ошибка сегментации после свободных переменных, которые используются в функции возврата
При попытке освободить результат дается «Ошибка сегментации».
char* ipv6_parser(char* str){
char *ret = malloc(sizeof(str));
ret = str;
ret = strtok(ret,":");
int i ;
for (i=0;i<5;i++){
ret = strtok(NULL, ":");
}
char *last = strtok(NULL, ":");
sprintf(ret,"%s%s",ret,last);
return ret;
}
int main(){
mtrace();
char *str=strdup("2001:1234:asdd:xeed:212:4b00:61");
char* result = ipv6_parser(str);
printf("\nResult - %s\n",result);
free(result);
free(str);
return(0);
}
'SizeOf (НТР) и' STRLEN (НТР) 'очень разные –
Это бессмысленно выделять память для' ret', если вы только собираетесь перезаписать указатель на эту память в самом следующем утверждении. Возможно, вы искали 'strdup()'? –
Используйте отладчик памяти, такой как [Valgrind] (http://valgrind.org/), чтобы помочь вам найти проблемы. –