如果输入字符串用gets(a)就没有这个问题,但是预设值就会有
%edcba
#include <stdio.h>
#include <stdlib.h>
void fanzhuan(char *p)
{
if(p[0]=='\0')
return;
else
{
fanzhuan(p+1);
printf("%c",p[0]);
}
}
int main()
{
char a[5]={'a','b','c','d','e'};
fanzhuan(a);
return 0;
}
因为char a[5]={'a','b','c','d','e'};数组的定义是满负荷的,并没有留一个空间放最后的‘\0’,所以输出出来最有一次返回指向的是一个未知空间,所以输出一个不可预见的字符,如果要正确输出只需如下:
char a[6]={'a','b','c','d','e','\0'};即可
因为a是一个字符数组, 你并没有赋值'\0'到任意一个位置。
所以程序执行的时候会一直往下找,直到找到'\0'为止。
你的结果只是刚好后面的那个内存位置是'%',再后面的就是'\0'了而已。
其实就是因为你没有手动设置一个结束位'\0',所以程序的结束不受你控制了而已