我正在尝试用 C 语言实现一个strlen递归函数,由于某种原因,它返回的值是预期的 4 倍。
int *strlen(char *s)
{
if(*s == '\0')
return 0;
else
return 1 + strlen(s+1);
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,当我将函数的返回类型更改为“char”时,我得到了所需的结果。我不明白为什么,无论如何它应该返回一个 int 。这段代码是我从书上抄来的,应该是对的。
您的函数返回一个指针。在您的系统上,anint是 4 个字节。指针算术意味着将 int 指针加 1 使其值增加 4。当您更改返回值时,char *它会“起作用”,因为char它是 1 个字节,因此指针算术意味着将 char 指针加 1 使其值增加 1。
您的函数根本不需要返回指针。
int strlen(char *s)
{
if (*s == '\0')
return 0;
else
return 1 + strlen(s+1);
}
Run Code Online (Sandbox Code Playgroud)
让它返回size_t比更合适int。