[英]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.