gpt4 book ai didi

c - 我的 tokenize 函数不返回并提示双链接列表损坏

转载 作者:行者123 更新时间:2023-11-30 17:46:52 24 4
gpt4 key购买 nike

我编写了一个函数,其目标是标记一个字符串并将前 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 detected * ./program: corrupted double-linked list

这有什么问题吗?如何修改第一个函数以返回字符串数组(如 char*)?

我也对有关我的代码的任何更一般的建议感兴趣。

最佳答案

您的内存分配有一些错误。例如:

char **result=malloc(n*sizeof(char*));
char *s=malloc(sizeof(char*)*10);

这些应该是这样的:

char **result=malloc(n*sizeof(char)*MAX_TOKEN_LENGTH);
char *s=(char *)malloc(sizeof(char)*strlen(str) + 1);

您还需要纠正这种情况:

while( result[i] != NULL )

它应该在生成 n 个 token 后停止。

while( (result[i] != NULL) && (i < n)  )

这是我对你的函数所做的尝试:

#include<string.h>

#define MAX_TOKEN_LENGTH 100

char **tokenize(char *str,const int n){
char delims[] = " \t,:";
char **result=malloc(n*sizeof(char)*MAX_TOKEN_LENGTH);
int i=0;
char *s=(char *)malloc(sizeof(char)*strlen(str) + 1);
strcpy(s,str);
result[i] = strtok(s, delims );
while( (result[i] != NULL) && (i < n) ) {
//printf( "\nresult is \"%s\"", result[i]);
i++;
result[i] = strtok( NULL, delims );
}
printf("\n");
return result;
}

int main(){
char **result;
int i;
int number_of_tokens = 4;
result = tokenize("hi i am: abhipranay,a\tchauhan",number_of_tokens);
for(i=0;i < number_of_tokens; i++){
printf("%s\n",(result[i]));
}
return 0;
}

关于c - 我的 tokenize 函数不返回并提示双链接列表损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19116931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com