strlen:它是如何工作的?

Man*_*anu 16 c strlen

strlen()内部如何工作?

pax*_*blo 51

strlen通常通过计算字符串中的字符直到\0找到字符为止.规范的实现将是:

size_t strlen (char *str) {
    size_t len = 0;
    while (*str != '\0') {
        str++;
        len++;
    }
    return len;
}
Run Code Online (Sandbox Code Playgroud)

函数中没有固有的错误,它完全按照文档记录的方式工作.

这并不是说它没有问题,即:

  • 如果你把一个"字符串"传给最后没有一个字符串\0,你可能遇到问题,但从技术上讲,这不是一个C字符串(a),这是你自己的错.
  • 你不能把\0字符放在你的字符串中,但在这种情况下,它不会是一个C字符串.
  • 它不是最有效的方式 - 你可以预先存储一个长度,这样你就可以更快地获得长度.

但这些都不是错误,它们只是设计决策的结果.

另请参阅Joel Spolsky 撰写这篇优秀文章,其中讨论了各种字符串格式及其特性,包括普通的C字符串,Pascal字符串以及两种空终止Pascal字符串的组合,尽管他有更多,我们应该说,"多彩"他们的期限:-)


(a) AC字符串被定义为一系列非终结符字符(即,除了之外的任何字符\0)后跟该终结符.因此,该定义不允许序列内的嵌入终止子和没有这种终止子的序列.

或者,更简洁地说(根据ISO标准):

字符串是由第一个空字符终止并包括第一个空字符的连续字符序列.