- 运行quit命令出错
这个调试很简单,我记录了修改代码后的GDB调试。至于找出问题所在我在下面简单的分析和描述了下。
根据运行结果
首先从main函数开始
这里我们知道FindCmd() 函数返回为空
现在要继续看FindCmd函数
这里我们看到FindCmd只是一个接口,真正调用的是SearchLinkTableNode()
那么我们需要继续看SearchLinkTableNode()函数
/*
* Search a LinkTableNode from LinkTable
* int Conditon(tLinkTableNode * pNode);
*/
tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tLinkTableNode * pNode))
{
if(pLinkTable == NULL || Conditon == NULL)
{
return NULL;
}
tLinkTableNode * pNode = pLinkTable->pHead;
while(pNode != pLinkTable->pTail)
{
if(Conditon(pNode) == SUCCESS)
{
return pNode;
}
pNode = pNode->pNext;
}
return NULL;
}
这里代码逻辑很明显错误,我们从InitMenuData()初始化知道,quit命令就是放在最后一个节点,pLinkTable->pTail就是指的最后一个节点。
那么此次判断条件就是没有包含最后一个节点。
所以我们只需要对代码进行简单的修改,让判断条件可以覆盖最后一个节点。
然后编译运行下是否符合结果。
这里有个很好的回答:https://blog.csdn.net/u010885548/article/details/80047592
*** callback函数 ***
当程序跑起来时,应用程序(application program)会时常通过API调用库里所预先备好的函数。但是有些库函数(library function)却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务。这个被传入的、后又被调用的函数就称为回调函数(callback function)。
运行机制:
设计:
回调接口一般由三部分组成:
中间函数和回调函数(回调的两个必要部分),以及起始函数
以本例来说明如何设计:
首先,设计起始函数
回调函数:
判断当前的节点里面的命令是否为输入命令
中间函数:
原文:https://www.cnblogs.com/cyssmile/p/12520518.html