簡體   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