0

我正在尝试使用指针将结构添加到已创建的节点。问题是我没有正确链接它们。我希望有人能帮助我。参数是正确的,一个是结构,另一个是一个字符串,它将进入我新创建的与 struct 连接的结构中。

(node s)--->(new node)-->null 我尝试调用 fileInsert() 并且当我尝试查看新节点中的数据时,它仍然为空。filenames 是指向链接节点 s 和我的新节点的结构节点指针。有人能指出我正确的方向吗?

void fileInsert(struct node *s, char *filename){
struct node *current=s->filenames;
while(current!=NULL){

    current=current->filenames;
}
struct node* f=NULL;
f=(struct node*)malloc(sizeof(struct node));
strcpy(f->data, filename);
current=f;
f->filenames=NULL;
}
4

3 回答 3

2

有两种方法可以做到这一点。

一是使新节点成为列表的开头:

struct node* fileInsert(struct node *s, char *filename) {
    struct node *current=s;

    struct node* f=NULL;
    f=(struct node*)malloc(sizeof(struct node));
    strcpy(f->data, filename);
    f->filenames=current;
    return f;
}

另一种是将它附加到当前列表中,这是您可能正在尝试做的事情。

struct node* fileInsert(struct node *s, char *filename) {
    struct node *current=s;

    if (current != null) {
        while(current->filenames!=NULL){ 
            current=current->filenames;
        }
    }
    struct node* f=NULL;
    f=(struct node*)malloc(sizeof(struct node));
    strcpy(f->data, filename);
    f->filenames=NULL;
    if (current == null) {
        current = f;
    } else {
        current->filenames = f;
    }
    return current;
}

第一个只是简单地创建一个新节点,然后指向 current,将其添加到前面。如果 current 是节点或 null,则此方法有效。

第二个检查列表是否存在,如果存在,它会转到列表的末尾(通过在文件名中查找空指针)并添加新节点,如果不存在,它将使新节点成为根节点节点

两个例程都返回列表的开头。

于 2013-11-09T01:31:28.163 回答
1

您多次为局部变量“当前”分配一些值,然后您的函数退出并且您永远失去该变量。相反,您需要做的是找到最后填充的成员并为其成员分配一个值filenames,指向新分配的结构。

于 2013-11-09T01:29:58.000 回答
0

将循环更改为

while ( current != null && current->filename != null)

发生的事情是当前变为空,但空是地址 0x0,所以你没有链接任何东西。你想停在最后一个非空节点

编辑:像这样描绘它

NODE1 -> NODE2 -> NODE3 -> NULL
     ^ current

当你遍历你的循环时,发生了什么

NODE1 -> NODE2 -> NODE3 -> NULL
         ^ current 

...

NODE1 -> NODE2 -> NODE3 -> NULL
                                                 ^ current

当前是一个没有真正有形的内存地址。没有物理意义。当你 reaxh NULL 时,你会丢失关于 node1 到 node3 的所有信息

当您添加节点时,您会得到这个

NODE1 -> NODE2 -> NODE3 -> NULL

NODE4->NULL

两者都存在于内存中但未连接

对不起,我的手机格式错误

于 2013-11-09T01:31:53.247 回答