我正在学习C语言。我看到了这个函数,可以找到一个字符串的长度。
size_t strlen(const char *str)
{
size_t len = 0U;
while(*(str++)) ++len; return len;
}
现在,循环什么时候结束?我有点困惑,因为str++会一直增加指针。
我正在学习C语言。我看到了这个函数,可以找到一个字符串的长度。
size_t strlen(const char *str)
{
size_t len = 0U;
while(*(str++)) ++len; return len;
}
while(*(str++)) ++len;
等同于:
while(*str) {
++len;
++str;
}
就相当于:
while(*str != '\0') {
++len;
++str;
}
现在你可以看到当 str
指向字符串末尾的 null
字符时,测试条件失败并停止循环。
str
的最终值外,在这种情况下它没有被使用。 - Steve Jessop0
的NUL
字符结尾。false
在C中表示为0
,其他任何值都表示true
。因此,我们不断将指针增加到字符串和长度,直到找到一个NUL
字符,然后返回。
nul
都保证是0
。 - Jens Gustedt要理解这个函数的概念,您需要了解两个概念:
1°)C字符串是字符数组。
2°)在C中,数组变量实际上是指向表格第一个元素的指针。
那么strlen函数是做什么的?它使用指针算术运算来解析表格(指针上的++表示:下一个元素),直到它到达结束信号("\0")。
一旦*(str++)
返回0,循环就会退出。这将在str
指向字符串的最后一个字符时发生(因为C语言中的字符串是以0结尾的)。
没错,str++
增加计数器并返回先前的值。星号 (*
) 解引用指针,即它给出字符值。
C 字符串以零字节结尾。当条件不再为真时,即为零时,while
循环退出。
因此,while
循环运行直到在字符串中遇到零字节为止。