定义strlen的函数说明

Explanation of the Function that Defines strlen

我正在学习 C++ 中的指针。

我研究了一下,发现手动定义strlen的函数是这样的。

int strlen(const char *a){
    const char *b;
    for (b=a;*b;++b);
    return b-a;
}

谁能用简单的英语解释这段代码?特别是,为什么在for循环中将*b设置为终止条件?

这不是作业的答案。这只是我在研究时出现的一个问题。谢谢

在 C 和 C++ 中,字符串实际上被称为 null terminated byte stringsnull 终止符 等于零。在 C 和 C++ 中,零值等同于 false。

循环所做的是迭代直到"current character"(由b指向)等于终止符。

这是一段特别简洁的 C 代码,有一个没有主体的 for 循环。

想法是将指针 b 设置到字符串 a 的开头,并继续前进直到遇到字符 '[=14=]',这表示字符串结束(即充当空终止符)。在那个循环中不需要做任何其他事情,因此它的主体是空的。

一旦循环结束,从b中减去a得到字符串的初始字符和它的空终止符之间的字符数,即字符串的长度。

下面是编写相同循环的更易读的方法:

for (b=a ; *b != '[=10=]' ; ++b) // Use explicit comparison to zero
    ;                        // Put semicolon on a separate line

当在需要逻辑表达式的语句中使用 C 表达式时,将应用与零的隐式比较。因此,*b != '[=17=]'*b 相同。