繁体   English   中英

strlen 函数在内部如何工作?

[英]How does the strlen function work internally?

strlen()在内部如何工作? 函数中是否有任何固有的错误?

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撰写这篇优秀文章,他讨论了各种字符串格式及其特征,包括普通 C 字符串(带有终止符)、Pascal 字符串(带有长度)以及两者的组合,以空字符结尾帕斯卡弦。

尽管他有一个更多,容我们说,最后一种类型的“多彩”术语,每当我想到 Python 的优秀(并且完全不相关)的 f-strings 时,就会经常想到这个术语:-)


(A)AC串被定义为一系列的非终止子字符(比其他任何字符\\0后跟一个终止子)。 因此,该定义不允许没有这样的终止子序列两个嵌入式终止子,和序列。 或者,更简洁地说(根据 ISO C 标准):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM