【发布时间】:2021-11-15 19:48:26
【问题描述】:
我最近一直在学习C,我遇到了一个strlen的源代码,这让我很困惑,我不得不在其他地方查找它,但还不能真正理解它。
strlen:
#include <stdio.h>
int strlen(const char *str)
{
const char* eos = str; // 1
while (*eos++); // 2
return (eos - str - 1); // 3
}
int main()
{
int len = strlen("Hello");
printf("Len: %d" , len);
return 0;
}
我不明白为什么我们使用局部变量 eos 以及为什么我们在一个空的 while 循环中使用它,然后从 strlen 函数返回最后一行?
【问题讨论】:
-
如果你问我,这不是
strlen的最佳实现。简而言之,eos会递增,直到找到\0终止符。然后将它与原始指针的差作为长度返回。 -
while 循环有“副作用”。它是
while (*eos) { eos++; }的缩写。这有助于使它更有意义吗?此外,eos可能是“字符串结尾”的标准。 -
Max,您显示的循环与问题中的循环不同(但实际上更好),因为它在找到空终止符后不会增加 eos。
标签: c c-strings strlen pointer-arithmetic