2017-02-18 28 views
-4

的strchrnul()函數是一樣,和strchr()不同的是,如果c是不是 發現,那麼它在 年代末返回一個指向空字節,而比NULL。具體含義

this是手冊頁中strchrnual的描述。我不明白the null byte at the end of s的具體含義。

謝謝!

+3

非常簡單,它返回的第一個'\ 0'的地址通常是c字符串的最後一個字節。 – n0p

+1

@ n0p你爲什麼要發佈答案作爲評論而不是答案? –

+0

@JesperJuhl這樣做有什麼問題? – n0p

回答

1

strchr()函數返回一個指向字符串中第一個字符的指針,如果該字符不在字符串中,則返回一個空指針。因此,您不得先取消引用strchr()的返回值,而不首先檢查它是否爲空指針以避免未定義的行爲。

strchrnul()功能與strchr()有幾種不同之處。首先,儘管strchr()是標準庫函數,但strchrnul()不是,而是自glibc 2.1.1以來的GNU擴展。您可能需要定義功能測試宏_GNU_SOURCE才能啓用此功能。其次,雖然strchrnul()返回指向字符串中第一次出現字符的指針,但如果字符不在字符串中,則會返回指向空終止符\0的指針。因此,從strchrnul()取消返回值總是安全的。如果字符未出現在字符串中,則返回值指向字符串的末尾(終止空字節),並且取消引用此指針的結果值爲0。推測函數strchrnul()可以獲取它的名字,因爲該函數返回一個指向尋找字符的指針或一個指向空字節的指針。

關於短語「終止空字節」:C字符串是一個數組char s,其特殊屬性表示字符串中的最後一個char是空字節。當然,一個char保證在C中具有一個字節的寬度。空字節由字符文字'\0'表示,但有時也被稱爲空終止符或NUL終止符(儘管該名稱對於編碼,但確實存在於ASCII和EBCDIC中)。該標準說:

C11§5.2.12
設置爲0的所有位字節,稱爲空 字符,應在基本執行字符集存在;用於終止字符串的是 。