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
是更好的方法。
我正在研究 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
是更好的方法。