You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用递归打印逆序字符串的C语言代码运行异常原因排查

问题原因分析

你的代码存在4个核心问题,直接导致运行结果不符合预期甚至崩溃:

  • 递归调用参数类型错误:fun(p[i]) 中p是char*类型,p[i]是单个字符(本质是整数形式的ASCII值),你将其当做内存地址传给要求char*参数的fun,属于非法内存访问,大概率直接触发段错误导致程序崩溃。
  • 静态变量逻辑错误:static int i是静态局部变量,只会在第一次调用fun时初始化一次,整个递归过程中所有层级的fun共享同一个i的值。递归深入时执行i++,等触碰到\0终止条件时i已经等于字符串长度(示例中"rama"的i最终为4,对应p[4]='\0'),而回溯过程中i的值不会自动回退,最终打印的都是空字符,没有有效输出。
  • 函数未前置声明:main函数调用fun前没有声明fun的原型,C语言默认会按照返回值为int、参数任意的规则处理函数调用,属于不规范写法,也容易隐藏参数类型不匹配的问题。
  • 返回值缺失:你声明fun返回int类型,但代码中除了终止条件的空return外没有任何返回值,会触发编译警告。
正确实现方案

不需要使用静态变量,直接通过指针移动实现递归逆序打印更简洁合理,参考代码如下:

#include <stdio.h>

// 前置声明函数
void fun(char *p);

int main()
{
    char arr[] = "rama";
    fun(arr);
    return 0;
}

// 无需要返回值,修改为void类型
void fun(char *p)
{
    if(*p == '\0')
        return;
    // 先递归处理下一个位置的字符
    fun(p + 1);
    // 回溯时再打印当前字符,自然实现逆序
    printf("%c", *p);
}

内容的提问来源于stack exchange,提问作者Ravi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 01:51:00