Я работаю над версией 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;
В общем EOF не единственный режим отказа от fscanf. В вашем случае это приведет к мусорной строке после последнего слова в файле. Проверить количество совпавших аргументов (!= 1)





Проблема заключается в элементе данных word внутри структуры узла. Я думаю, что ваш node определяется как
struct node
{
char word[46];
struct node_ptr *next;
};
так что этот случай node_ptr->word не является модифицируемым lvalue. Поэтому, когда вы выполняете задание node_ptr->word = word, это означает, что вы нарушили это правило. Вы пытаетесь изменить lvalue, которое не является модифицируемым lvalue (node_ptr->word теперь является lvalue). Вы должны использовать strcpy для копирования строки из word в node_ptr->word, это лучший способ.
Трудно сказать, не видя, как определяется
node. Рассмотрите возможность работы над минимальный воспроизводимый пример. Если вы пытаетесь скопировать данные из одного массива символов в другой, обратите внимание наstrcpy.