C语言递归输出字符串触发Segmentation fault段错误问题求助
错误原因分析
你的代码触发段错误的核心原因是递归调用参数的后置自增逻辑错误,具体如下:
- C语言中后置自增运算符
ptr++的规则是:先返回指针当前的原始值,再执行指针自增的操作。你在if(*ptr!='J') recursion(ptr++);这行传入递归函数的,永远是自增前的指针地址,也就是每次递归调用拿到的指针都指向字符串第一个字符!,永远满足*ptr != 'J'的判断条件,会无限触发递归调用,最终程序栈空间被占满,触发段错误。
修复方案
只需要把递归调用的参数修改为ptr + 1或者前置自增++ptr即可,修改后的函数示例:
void recursion(char *ptr) { if(*ptr!='J') recursion(ptr + 1); printf("%c",*ptr); }
修改后递归会每次把指针向后偏移1位传入下一层,直到匹配到字符J后停止递归,逐层返回时打印对应字符,最终输出你期望的Janez!。
补充:标准C规范中
main函数的返回值应为int,修改为int main()并在末尾加return 0;可以消除编译警告,不过这不是本次段错误的诱因。
内容的提问来源于stack exchange,提问作者XraySensei
相关产品推荐
相关产品推荐

