strlen()
如何在内部运作?
答案 0 :(得分:51)
strlen
通常通过计算字符串中的字符直到找到\0
字符为止。规范的实现将是:
size_t strlen (char *str) {
size_t len = 0;
while (*str != '\0') {
str++;
len++;
}
return len;
}
该功能没有固有的错误,它的工作方式完全符合记录。
这并不是说它没有问题,即:
\0
的“字符串”,你可能会遇到问题,但从技术上讲,这不是C字符串(a)和这是你自己的错。\0
个字符,但在这种情况下,它不会是C字符串。但这些都不是错误,它们只是设计决策的结果。
参见Joel Spolsky的this excellent article,他讨论了各种字符串格式及其特性,包括普通的C字符串,Pascal字符串以及两者的组合,空终止的Pascal字符串,尽管他有更多,我们应该对他们来说,“多彩”一词: - )
(a) C字符串被定义为一系列非终止符(即\0
之外的任何字符),后跟该终结符。因此,该定义不允许序列中的嵌入终止子和没有这种终止子的序列。
或者,更简洁地说(根据ISO标准):
字符串是由第一个空值终止并包含第一个空值的连续字符序列 字符。