bakaSuc 2021-10-29 19:06 采纳率: 66.7%
浏览 38

一个bool型递归函数的返回值小疑问

把程序中的printf FOO注释掉之后,输出是status:0,如果不注释,那么输出是status:4。
请问为什么没有修改任何变量的printf语句把isValid返回的假变为了真?
把具体打印的"FOO"字符串变长,返回值变成了9,更无法理解了

bool isValid(char* s) // "{[()(){}]}"
{
    if (*s == *(s + 1))
        return true;
    else if (*(s + 1) == '{' || *(s + 1) == '(' || *(s + 1) == '[')
    {
        isValid(s + 1);
        //printf("FOO\n");
    }
    else
        return false;
}
int main(void)
{
    char ch[] = "{[()(){}]}";
    char* s = ch;

    printf("status:%d", isValid(s));

    return 0;
}
  • 写回答

1条回答 默认 最新

  • Linux猿 Linux领域优质创作者 2021-10-29 19:22
    关注

    和printf无关,重新编译下,而且没判断字符串边界

    评论

报告相同问题?

问题事件

  • 创建了问题 10月29日

悬赏问题

  • ¥15 求复现机器学习文章一篇
  • ¥15 爬虫抓取数据|解析视频文本内容(相关搜索:自动化)
  • ¥15 combobox绑定值改变的问题
  • ¥15 from seleniumwire import webdriver 在抓取http://链接的时候会自动转https://这个怎么解决
  • ¥15 hive直连数据库模式插入mysql表数据失败(相关搜索:数据库)
  • ¥30 不会,学习,有偿解答
  • ¥15 SQL查询语句报错(检查)
  • ¥15 此表中公式应该怎么写
  • ¥15 求HI-TECH PICC 9.50 PL3安装包
  • ¥15 下载ctorch报错,求解