【问题标题】:Inserting New Node插入新节点
【发布时间】:2014-03-06 06:18:47
【问题描述】:

这是我为更熟悉节点而编写的程序的一个功能。

它创建一个新节点并将信息插入代码字段,然后指向现有的第一个节点。然后将head分配给新创建的节点;

不幸的是,它给了我一个不兼容的类型 new_node->location = code;

typedef char LibraryCode[4];

typedef struct node {
    LibraryCode location;
    struct node *next;
} Node;

void insertFirstNode(LibraryCode code, Node **listPtr) {
    Node *new_node;
    new_node=malloc(sizeof(Node));
    new_node->location = code;
    new_node->next = *listPtr;
    *listPtr = new_node;
}

【问题讨论】:

    标签: c linked-list


    【解决方案1】:

    LibraryCodetypdefed 作为 char [4]。您不能只将一个数组分配给另一个数组,您需要将一个数组中的数据 memcpystrcpy 分配给另一个数组。

    一个更简单的例子:

    void foo() {
       char a[4];
       char b[4];
       a = b;
    }
    

    编译会报错:

    In function ‘foo’:
    error: incompatible types when assigning to type ‘char[4]’ from type ‘char *’
       a = b;
         ^
    

    您可以看到您实际上是在尝试为数组分配一个指针,这是不兼容的类型。


    typedef char LibraryCode[4]; 可能不是一个好主意。如果您要为节点中的字符串保留一个固定大小的缓冲区,那么我会放弃typedef,这样就很清楚您在做什么。另外,我永远不会将 char [4] by value 传递给函数。对于字符串,传递const char*

    【讨论】:

      猜你喜欢
      • 2021-09-03
      • 1970-01-01
      • 2016-01-17
      • 2013-07-11
      • 2014-06-17
      • 1970-01-01
      • 2017-02-07
      • 2021-02-25
      相关资源
      最近更新 更多