gpt4 book ai didi

c - strlen 函数在内部是如何工作的?

转载 作者:太空狗 更新时间:2023-10-29 16:31:25 25 4
gpt4 key购买 nike

strlen() 在内部是如何工作的?该功能是否存在任何固有错误?

最佳答案

strlen 通常通过计算字符串中的字符直到找到 \0 字符来工作。一个规范的实现是:

size_t strlen (char *str) {
size_t len = 0;
while (*str != '\0') {
str++;
len++;
}
return len;
}

至于函数中可能存在的固有错误,没有任何错误 - 它完全按照记录工作。这并不是说它没有某些问题,即:

  • 如果你向它传递一个末尾没有 \0 的“字符串”,你可能会遇到问题,但从技术上讲,这不是 C 字符串 (a) 这是你自己的错。
  • 您不能将 \0 字符放入您的字符串中,但同样,在这种情况下它不会是 C 字符串。
  • 这不是最有效的方法 - 您可以预先存储一个长度,这样您就可以更快地获得长度。

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

关于最后一个要点,另请参阅 this excellent article由 Joel Spolsky 撰写,他在其中讨论了各种字符串格式及其特征,包括普通 C 字符串(带有终止符)、Pascal 字符串(带有长度)以及两者的组合、空终止的 Pascal 字符串。

虽然他有一个更多的,我们可以说,最终类型的“丰富多彩”的术语,每当我想到 Python 的优秀(并且完全不相关的)f-strings :-)


(a) C 字符串被定义为一系列非终止符字符(other \0 之外的任何字符)后跟一个终结者。因此,此定义不允许序列中嵌入终止符,也不允许没有此类终止符的序列。或者,更简洁地说(根据 ISO C 标准):

A string is a contiguous sequence of characters terminated by and including the first null character.

关于c - strlen 函数在内部是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4132849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com