c - 即使在基本情况下调用递归函数时也会无限循环

标签 c recursion c-strings

这段代码我看不懂。我想我知道的是,当我传递 "abc" 时,x 成为指向字符串中第一个元素的指针,这是正确的吗?为什么它给我无限循环?

这是我的代码:

void foo1(char* x)
{
    if (!x)
        return;
    printf("%c ",*x);
    foo1(++x);
}

int main()
{
    foo1("abc");
    return 0;
}

最佳答案

当指针变为 null 时,您将停止迭代。您真正想要的是在到达 \0 字符(即字符串末尾)时停止迭代:

int main()
{
  foo1("abc");

  return 0;
}

void foo1(char* x)
{
  if (*x == 0)
      return;

  printf("%c ",*x);
  foo1(++x);
}

因为您是在指针值而不是指向的项目上迭代,所以您基本上会从字符串的位置开始迭代进程地址空间。在到达导致段错误的无效地址之前,您很可能会用完堆栈空间!

关于c - 即使在基本情况下调用递归函数时也会无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48299883/

相关文章:

计算字符串中辅音的个数

C libxml 编码问题。

c - 如何将迭代算法转换为递归求解

java - 有人可以向我解释一下这个递归背后的逻辑吗

java - 计算二叉搜索树的深度?

计算字符串中字符出现次数时的 C++ 段错误

c++ - C++包含整个C语言吗?

c - C语言中while循环内的fscanf问题

c++ - 如何从 char* 函数返回指针

string - 无论如何要在 Go 中创建以空字符结尾的字符串吗?