2017-02-12 10 views
-1

Когда я хочу, чтобы вставить строку в связанный список он показываетВставка строка в связанный список не работает

несовместимого целого для преобразования указателя прохождения «символ» параметра типа «константный символ *»; взять адрес с & [-Wint преобразования] в строке strcpy(current->name,name1);

Здесь код

node* new_node(char name1,float num) { 
    node *current = malloc(sizeof(node)); 
    if (current == NULL) return NULL; 
    strcpy(current->name,name1); 
    current->score = num; 
    current->next = NULL; 
    return current; 
} 

struct NODE { 
    char name[40]; 
    float score; 
    struct NODE *next; 
}; 

Может ли один помочь мне в том, что я ищу и перепробовал много способов, но не работает ,

+1

'символ name1' ->' символ * name1' (имя представляет собой массив символов, а не один 'char') –

+0

@ Keine Lust: Я сделал это, но показать ошибку" конфликтующие типы для «new_node» – nas2016

+1

Почему вы используете 'NODE' (верхний) и' node' (lower)? –

ответ

0

В определении функции, node* new_node(char name1, float num) вы получаете один символ, что вы хотите, это указатель на место, где строка фактически сохраняется, поэтому изменить это определение к узлу * new_node(char *name1, float num)

также изменить в месте, где вы могли бы объявить эту функцию, то есть в файле h или в начале этого файла.

+0

Как я уже говорил выше, я попытался, но показывает ошибку – nas2016

+1

Также измените место, где вы, возможно, объявили функцию, то есть в файле ah или в начале этого файла, другой мудрый пост точной ошибки компиляции – Pbd

+1

О, я забыл изменить где я объявил, спасибо – nas2016

0

Это кажется домашней проблемой.

В любом случае, есть несколько проблем с вашим кодом, такие как

  • Неправильный порядок декларации (struct NODE объявляется после того, как он используется). Это может быть не в реальном коде, но если это так, исправьте его.
  • Неверный тип используется. Вы используете node вместо NODE в функции new_node. Это само должно вызывать ошибку компилятора.
  • Использование copy-by-value не работает для массива в C. Функция принимает первый аргумент типа char. Если вы хотите, чтобы только символ был скопирован, тогда возьмите его адрес, как было предложено. В противном случае измените тип на char*

    strcpy(current->name, &name1); \\ if name1 is of type char 
    strcpy(current->name, name1); \\ if name1 is of type char* 
    
  • Использование strcpy вместо strncpy. Первый страдает от потенциального переполнения буфера.

http://codepad.org/WPR5Piye

Смежные вопросы