gpt4 book ai didi

c - 链表/libxml - 搜索特定类型的下一个元素并检查列表结尾

转载 作者:太空宇宙 更新时间:2023-11-04 07:06:53 24 4
gpt4 key购买 nike

我试图找到链表的下一部分 XML_ELEMENT_NODE 并在找到或到达列表末尾时停止:

do
{
cur = cur->next;
} while (cur->type != XML_ELEMENT_NODE && cur != NULL);

所以我先得到下一个,因为如果我先检查,我会卡在同一部分,不会继续前进。问题是当我到达结尾 cur == NULL 时,我无法检查类型,因为我在 NULL 并且显然无法获取类型。有没有一个优雅的解决方案,因为我能想到的都需要我在循环中设置的替换变量,这样我就可以在 while() 中检查它们。我认为 break 不是一个选项。

最佳答案

您应该遵循一定的迭代流程。通常,您必须永远不要取消引用空指针,因此您始终必须确保curr 不是空指针(简而言之:curr != NULL)。

如果出于任何原因,你需要先获取下一个元素,你应该使用:

while ( curr != NULL ) {

curr = curr->next;
if ( (curr != NULL) && (curr->type == XML_ELEMENT_NODE) )
break;
}

但更好的方法是始终在当前节点上操作(这就是为什么要这样调用指针)。如果您知道 curr 不是NULL(由前面的代码确定),您可以使用:

// from some previous code, you have:
curr = curr->next;

... (do something unrelated, i.e. do not dereference curr if null-pointer)
while ( (curr != NULL) && (curr->type != XML_ELEMENT_NODE) ) {
curr = curr->next;
}

在任何循环之后,您必须测试 curr != NULL 以在取消引用 curr 之前捕获列表结束条件。

请注意,curr 始终是当前节点(您开始/处理的节点。

关于c - 链表/libxml - 搜索特定类型的下一个元素并检查列表结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32254411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com