我编写了一个函数,其目标是对字符串进行标记并将前 n 个标记作为 char* 数组返回。
最初,我有一个标记字符串的函数,但不返回任何内容(只是为了测试):
void tokenize_1(char *str,const int n){
char delims[] = " \t,:";
char *result=NULL;
int i=0;
char *s=malloc(sizeof(char*)*10);
strcpy(s,str);
result = strtok(str, delims );
while( result != NULL ) {
i++;
printf( "\nresult is \"%s\"", result);
result = strtok( NULL, delims );
}
printf("\n");
}
然后,我想返回一个 n char* 数组:
char **tokenize(char *str,const int n){
char delims[] = " \t,:";
char **result=malloc(n*sizeof(char*));
int i=0;
char *s=malloc(sizeof(char*)*10);
strcpy(s,str);
result[i] = strtok(s, delims );
while( result[i] != NULL ) {
printf( "\nresult is \"%s\"", result[i]);
i++;
result[i] = strtok( NULL, delims );
}
printf("\n");
return result;
}
结果似乎是正确的。但是我的程序不返回并打印消息:
* 检测到 glibc * ./program: 损坏的双链表
那有什么问题?如何修改第一个函数以返回字符串数组(如 char*)?
我也对有关我的代码的任何更一般的建议感兴趣。