在链表中动态存储字符串

时间:2014-11-14 21:14:02

标签: c string dynamic linked-list arrays

我想在C中创建一个链表,用户可以在其中输入将作为节点存储在列表中的字符串。这是我的节点结构:

typdef struct NODE {
    char word[50];
    struct NODE* next;
} node;

从我的main方法中,我想提示用户输入一个字符串,然后调用一个方法将字符串添加到链表中(但不包括空格后面的任何字符),并重复执行该操作直到用户输入一个终止进程的特定字符串,所以在我的主要方法中我有:

void main(){
    node* fullList = NULL;
    char stopString[5];
    sprintf(stopString, "stop"); 
    char string[50];
    printf("Enter a word: ");
    scanf("%[^ ]s", string);
    while (strcmp(string, stopString) != 0) {
         addToLinkedList(fullList, string);   
         printf("Enter a word: ");
         scanf("%[^ ]s", string);
    }
}

这是我的补充方法:

void addToLinkedList(node* list, char str[]) {
    node* freeSpot;
    node* newNode;

    freeSpot = list;
    if (list == NULL){
            freeSpot = freeSpot->next;
    }

    newNode = (node *)malloc(sizeof(node));

    newNode->word = str;
    //strcpy(nweNode->next, str);
    newNode->next = NULL;
    freeSpot->next = newNode;

}

但我收到错误:

"incompatible types when assigning to type âchar[256]â from type âchar *â"

如果我替换“newNode-> word = str;”下面注释掉了这段代码,我得到了:

warning: passing argument 1 of âstrcpyâ from incompatible pointer type [enabled by default]
/usr/include/string.h:128:14: note: expected âchar * __restrict__â but argument is of type
âstruct NODE *â

我在这一点上非常困难,我不确定如何成功实现这一点;有什么建议吗?

2 个答案:

答案 0 :(得分:1)

此错误与注释行有关。评论完之后你保存了文件吗?你清理过这个项目了吗? 无论如何,这一行:newNode->word = str;也会引起麻烦。请改用strcpy。你想复制字符串,而不是指针。

答案 1 :(得分:0)

删除:

newNode->word = str;

并添加:

strcpy(nweNode->word, str);

您正在复制到当前节点的成员字,而不是复制到下一个节点。

在复制之前,您应检查str是否不超过(50-1)。