如何在链表插入函数中插入字符串

时间:2014-03-31 00:37:33

标签: c linked-list

我想在名为struct data_node的函数中将字符串插入insert。我的struct data_node

struct data_node {
   char name [25];
   int data;
   struct data_node *next;
   };

我的插入功能是:

struct data_node * insert (struct data_node **p_first, int elem, char *word ) {

    struct data_node *new_node, *prev, *current;
    current=*p_first;
    while (current != NULL && elem > current->data) {
       prev=current;
       current=current->next;
    } /* end while */

    /* current now points to position *before* which we need to insert */
    new_node = (struct data_node *) malloc(sizeof(struct data_node));
    new_node->data=elem;
    new_node->name=*word;

    new_node->next=current;
    if ( current == *p_first ) /* insert before 1st element */
       *p_first=new_node;
    else                       /* now insert before current */
       prev->next=new_node;
    /* end if current == *p_first */
    return new_node;
};

当我编译时,它表示第22行在分配类型' char [25]'时不兼容。从类型' char'这意味着new_node->name=*word;是错误的。我怎么能解决这个问题?

3 个答案:

答案 0 :(得分:1)

链表结构无关紧要。这个问题归结为将一个char[]复制到另一个strncpy(new_node->name, word, 25); 。这将有效:

word

有一些警告。如果char[]没有指向有效的new_node->name,那么这可能会导致未定义的行为。如果它指向包含超过25个 25个或更多(非空)字符的数组,则操作会将前25个字符复制到new_node->name,这意味着NAMELENGTH是空终止的,如果其他代码假定它是,则可能在以后引起麻烦。 正如WhozCraig指出的那样,使用null终止目标字符串几乎总是一个好主意 - 确保通过复制少于一个字符(即25-1)为其留出空间。您可以考虑定义一个常量{{1}},这样您就不会在代码中出现幻数25。

答案 1 :(得分:0)

data_node.data应为void *。这样你可以存储任何类型(虽然你必须知道它在阅读时的类型)。

答案 2 :(得分:0)

您应该使用strcpy方法复制new_node -> name中的字值。

看看this link

strcpy(new_node->name, word);