您尚未登录。

楼主 # 2023-10-25 16:07:03

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

函数里将一个错误的指针,指向的变量,改变了,结果执行完该函数后,直接退出该函数的上一层函数了,没有执行接下来的语句。

这个函数的作用是,将表示四则运算的中缀表达式,变成后缀表达式。

void infixToPostfix(char* infix, char* postfix)
{
    Stack s;
    initStack(&s);

    char* p = infix;
    char* q = postfix;

    while(*p != '\0')
    {
        ...
    }
    while (!isEmpty(&s))
    {
       ...
    }
    *(q - 1) = '\0';
}

infix字符串数组,如果给正确的字符串表达式,则程序运行正常。
可有的时候,没有给infix字符串数组赋值,结果全是0x00,结果运行这个函数后,跟紧该函数的其他语句,都没有执行,直接跳出上一层函数了。

想了想,估计问题是出在函数结尾这个*(q-1) = '\0',本来q指向postfix数组的开头,结果,因为给的infix里没有找到字符串或运算符,直接执行这一句了,那么就是将postfi数组的上一个地址里的数据赋值为0x00了。

我好奇的是,为什么造成的结果是跳过接下来的语句,直接返回上一层的函数了呢?

离线

楼主 #3 2023-10-28 08:48:22

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

Re: 函数里将一个错误的指针,指向的变量,改变了,结果执行完该函数后,直接退出该函数的上一层函数了,没有执行接下来的语句。

演技担当黄晓明 说:

老哥你发现了异常回滚的逻辑了?恭喜了

Try
{
}
catch(Exception &ex)
{
}

可是,c语言没有try catch啊。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn