为什这个翻转字符串的函数会多出来一个空格呢?
#include <stdio.h>void foo(char * s)
{
if (*s != '\0')
foo(s + 1);
printf("%c", (char)*s);
}
int main()
{
char s[] = "hello world";
foo(s);
}
if (*s != '\0')
{
foo(s + 1);
printf("%c", *s);
}
这样应该能明白了吧。 void foo(char * s)
{
if (*s != '\0')
foo(s + 1);
printf("%c", (char)*s);
}
*s != '\0' 时执行 foo(s + 1);
那等于 '\0' 时怎么办?
等于 '\0',if 条件不成立
不执行 foo(s + 1);
继续向下执行,执行 printf("%c", (char)*s);
别忘了现在 *s 是 '\0'
所以
printf("%c", (char)*s);
也就是
printf("%c",'\0');
#include <stdio.h>
void foo(char *s)
{
if(*s != '\0')
foo(s + 1);
else
return;
printf("%c", (char)*s);
}
int main(void)
{
char s[] = "hello world";
foo(s);
return 0;
}
页:
[1]