c - 在c中使用递归的strlen函数

标签 c recursion strlen

我是递归主题的新手,我一直在尝试使用递归编写“strlen”函数,这就是我的尝试:

int strlen ( char str[], int i)
{
    if ( str[i] == 0) return i+1;
    return strlen(str,i++);
}

我尝试了一些非常相似的东西

int strlen( char str[], int i)
{
    if ( str[i] == 0) return 1;
    return strlen(str,i++) + 1;
}

在我的主要功能中

int main()
{
     char word[MAX_DIGITS];
     scanf("%s",word);
     printf("%d", strlen(word,0));
     return 0;
}

但是我的程序每次运行都会崩溃,我错过了什么? (顺便说一句,我正在使用 C90)

最佳答案

您的问题从这里开始:

i++

这称为后缀。 只需使用 ++ii + 1

Postfix 发送值,然后递增变量。就像这样写:

return strlen(str,i);
i = i + 1;

您必须使用 Prefix,它会递增变量然后发送值。前缀 (++i) 的作用如下:

i = i + 1;
return strlen(str,i);

或者只发送值而不改变变量:

return strlen(str, i + 1);

在我看来,这是最简单的方法。

关于c - 在c中使用递归的strlen函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37745442/

相关文章:

c - 如何确定字符串的长度(不使用 strlen())

c - 5.2 循环二进制如何计算二进制值

c - 为什么要在这段代码中涉及类型提升?

c - 如果目标和源相同,那么 memmove 会做什么?

c - 主线程中的多线程矩阵乘法不会等到其他线程完成工作吗?

java - 字符串中 'x' 个字符的数量 - 递归

C - 递归搜索函数找到键然后返回NULL

c - strlen 数组有不同的结果

递归时Haskell Print?

c - 将 strlen 与 scanf(%ms) 结合使用