CS50 pset5 哈希表节点

CS50 pset5 hashtable nodes

我正在研究 pset5 的哈希表版本。我无法将单词值分配给我创建的节点。在这个 while 循环之外我没有改变任何东西。我从以下行收到错误:node_ptr->word = word;它给出了一个错误“错误:数组类型 'char [46]' 不可分配。”为什么那条线不起作用?

// Buffer for a word
char word[LENGTH + 1];

// Insert words into hash table
while (fscanf(file, "%s", word) != EOF)
{
    //1) Create a node
    node *node_ptr = malloc(sizeof(node));

    //check memory != NULL
    if (!node_ptr)
    {
        return 1;
    }

    //assign values to node 
    node_ptr->word = word;
    node_ptr->next = NULL;

问题出在节点结构中的数据成员word。我认为您的 node 定义为

struct node
{
     char word[46];
     struct node_ptr *next;
};

所以这种情况 node_ptr->word 不是可修改的左值。所以当你做赋值 node_ptr->word = word 就意味着你违反了这个规则。您正试图修改一个不可修改的左值(node_ptr->现在的词是左值)。您应该使用 strcpy 将字符串从 word 复制到 node_ptr->word 是更好的方法。