c-单独链接的单词列表



我正在尝试编写一个函数words,它从作为参数传递的文本中生成一个单词的单链列表(用空格分隔的字符序列)。结果列表中的单词应与正文中的单词相同。

不幸的是,程序在运行时出错了,你能解释一下出了什么问题吗?我也很感激一些提示。这是代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
struct node{
    char* word;
    struct node* next;
};
void printList(struct node* list){
    struct node* it = list;
    while(it != NULL){
        printf("%s ", it -> word);
        it = it -> next;
    }
    printf("n");
}
void insertLast(struct node* tail, char* neww){
    tail -> next = (struct node*)malloc(sizeof(struct node));
    tail = tail -> next;
    tail -> word = neww;
    tail -> next = NULL;
}
struct node* words(char* s){
    char* slowo = strtok(s, " ");
    struct node* head;
    struct node* tail;
    if (sizeof(slowo) == 0)
        return NULL ;
    head = (struct node*)malloc(sizeof(struct node));
    head -> word = slowo;
    head -> next = NULL;
    tail = head;
    slowo = strtok(NULL, " ");
    while (slowo != NULL){
        insertLast(tail, slowo);
        tail = tail -> next;
        slowo = strtok(NULL, " ");
    }
    return head;
}
int main() {
    printList(words("Some sentance la al olaalal"));
    getch();
    return (EXIT_SUCCESS);
}

如果您不希望insertLast在调用函数中设置tail,则必须通过引用传递指针(即作为指向指针的指针):

void insertLast(struct node** tail, char* neww)

insertLast中使用适当的取消引用使其工作。

您的words()函数在适当的位置修改其参数(s)。您正在使用字符串文字调用words(),不允许修改字符串文字。为了解决这个问题,可以使用strdup()malloc()+strcpy()s放入堆分配的内存中。

相关内容

  • 没有找到相关文章

最新更新