![](/img/trans.png)
[英]char array in structs - why does strlen() return the correct value here?
[英]Why does my recursive strlen function return value 4 times bigger?
我正在尝试通过递归在 C 中实现strlen
function,由于某种原因,它返回的值是预期的 4 倍。
int *strlen(char *s)
{
if(*s == '\0')
return 0;
else
return 1 + strlen(s+1);
}
有趣的是,当我将 function 的返回类型更改为“char”时,我得到了想要的结果。 我不明白为什么,无论如何它应该返回一个 int。 这段代码是我从书上抄来的,应该是对的。
您的 function 返回一个指针。 在您的系统上,一个int
是 4 个字节。 指针算术意味着将 1 加到 int 指针会使它的值增加 4。当您将返回值更改为char *
它“有效”,因为char
是 1 个字节,所以指针算术意味着将 1 加到 char 指针会增加它的值1.
您的 function 根本不需要返回指针。
int strlen(char *s)
{
if (*s == '\0')
return 0;
else
return 1 + strlen(s+1);
}
让它返回size_t
比int
更合适。
strlen
应该返回size_t
而不是int
。size_t mystrlen(const char *str)
{
return *str ? 1 + mystrlen(str + 1) : 0;
}
int main(int argc, const char *argv[])
{
printf("%zu\n", mystrlen("Hello"));
}
这段代码是从书上抄来的,应该是对的
如果他们想让你返回指向 integer 的指针,那么他们可能想要这样的奇怪东西:
int *mystrlen(const char *str)
{
static int first = 1;
static int size = 0;
if(first) {size = 0; first = 0;}
if(*str)
{
size++;
mystrlen(str + 1);
}
else
{
first = 1;
}
return &size;
}
int main(int argc, const char *argv[])
{
printf("%d\n", *mystrlen("Hello"));
printf("%d\n", *mystrlen(" World"));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.