strlen:它是如何工作的?

时间:2010-11-09 10:53:47

标签: c strlen

strlen()如何在内部运作?

1 个答案:

答案 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标准):

  

字符串是由第一个空值终止并包含第一个空值的连续字符序列   字符。