我正在学习C.而且,我看到这个函数找到一个字符串的长度。
size_t strlen(const char *str)
{
size_t len = 0U;
while(*(str++)) ++len; return len;
}
现在,循环什么时候退出?我很困惑,因为str ++总是增加指针。
答案 0 :(得分:11)
while(*(str++)) ++len;
与:
相同while(*str) {
++len;
++str;
}
与:
相同while(*str != '\0') {
++len;
++str;
}
现在您看到str
指向字符串末尾的null
字符时,测试条件失败并停止循环。
答案 1 :(得分:10)
NUL
字符终止,其值为0
false
,其他任何内容均为true
。所以我们继续将指针递增到字符串和长度,直到找到NUL
然后返回。
答案 2 :(得分:2)
你需要理解两个概念才能理解这个功能:
1°)C字符串是一个字符数组。
2°)在C中,数组变量实际上是指向表的第一种情况的指针。
strlen的作用是什么?它使用指针算术来解析表(指针上的++表示:下一个例子),直到它到达结束信号(“\ 0”)。
答案 3 :(得分:0)
一旦*(str++)
返回0,循环就会退出。当str
指向字符串的最后一个字符时会发生这种情况(因为C中的字符串终止于0)。
答案 4 :(得分:0)
正确,str++
增加计数器并返回先前的值。星号(*
)取消引用指针,即它为您提供字符值。
C字符串以零字节结尾。当条件不再为真时,while
循环退出,这意味着当它为零时。
因此while
循环运行,直到遇到字符串中的零字节。