我有这个函数,其中list
是指向链表的指针。这是包含具有数据的节点的列表结构。
typedef struct node{
char *data;
struct node *next;
}NODE;
typedef struct list{
NODE* head;
char *id;
struct list *next;
int size;
}LIST;
我的目标是从列表中获取每个数据,并将其作为**char
返回。它看起来很有效,但我做words = (char**) calloc(numOfWords*wordLength,sizeof(char));
的那一行我不确定它是否正确,以及它是如何准确工作的。你能在我的代码中看到任何错误并帮助我吗?谢谢
char **reset_words(LIST *list){
char ** words;
int i = 0,j = 0,wordLength,numOfWords = list->size;
NODE *p;
for (p = list->head; p != NULL; p = p->next) {
wordLength = my_strlen(p->data);
words = (char**) calloc(numOfWords*wordLength,sizeof(char));
for(int k=0;k < wordLength;k++){
words[i][j] = p->data[k];
j++;
}
i++;
}
return words;
}
在我查看了您的代码后,这里有一些更改:
- 如果您的列表是一个正确完成的链表,并且所有节点都有相同大小的数据,那么您可以简单地执行
wordLength = strlen(list->head->data)
- 初始化循环外的单词。我的做法应该奏效
- 由于您有字符串,您可以简单地执行
strcpy(words[i],p->data)
将字符串添加到单词数组中
试试这个,让我知道它是否有效。
char **reset_words(LIST *list){
char ** words;
int i = 0,j = 0,wordLength = strlen(list->head->data),numOfWords = list->size;
NODE *p;
words = (char **)malloc(numOfWords * sizeof(char *));
for (int h=0; h<numOfWords; h++)
words[h] = (char *)calloc(wordLength,sizeof(char));
for (p = list->head; p != NULL; p = p->next) {
strcpy(words[i],p->data);
i++;
}
return words;
}
wordLength = my_strlen(p->data);
我不知道my_strlen()
做什么。但您必须记住为后面的