定义strlen

时间:2017-07-09 14:31:26

标签: c++ strlen

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

我研究过并发现定义strlen的手动函数是这样的。

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

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

这不是家庭作业的答案。这只是我在研究期间出现的一个问题。感谢。

2 个答案:

答案 0 :(得分:2)

在C和C ++中,字符串实际上称为 null终止 字节字符串 null终止符等于零。在C和C ++中,零值等于false。

循环的作用是迭代直到“当前字符”(由b指向)变得等于终结符。

答案 1 :(得分:2)

这是一段特别简洁的C代码,其中for循环没有正文。

我们的想法是将指针b设置为字符串a的开头,并继续前进,直到您点击字符'\0',这表示搅拌结束(即服务作为null终止符)。在那个循环中没有其他任何东西需要做,因此它的身体是空的。

循环结束后,从a减去b会产生字符串的初始字符与其空终止符之间的字符数,即字符串的长度。

这是一种更易读的方法来编写相同的循环:

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

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