我需要ipv6地址中的最後2列。 (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(STR)'和'strlen的(STR)'有很大的不同 –
這是毫無意義的了'ret'分配內存,如果你只是要覆蓋在下一個語句中指向該內存的指針。也許你正在尋找'strdup()'? –
使用內存調試器,如[Valgrind](http://valgrind.org/)來幫助您發現問題。 –