c++ - 请问 strchrnul的这段解释的详细含义
ringa_lee
ringa_lee 2017-04-17 15:24:50
0
2
1099

The strchrnul() function is like strchr() except that if c is notfound in s, then it returns a pointer to the null byte at the end of s, rather than NULL.

这是这里的man page对 strchrnul 的解释. 其中the null byte at the end of s就是指 c 字符串最后的那个\0吗? 我不是很确定 谢谢啦

ringa_lee
ringa_lee

ringa_lee

全部回覆(2)
Ty80

你理解的是對的。
大意是,strchrnul跟strchr的差別只有一點,strchr在找不到c的時候回傳NULL,strchrnul回傳字串末尾的位址。

左手右手慢动作

在這裡提問時我也這麼上提問了,上面David Bowling的回答令小白我受益人多,在此貼出來分享下他的回覆:

strchr() 函數傳回一個指向字串中第一次出現的字元的指針,如果字元不在字串中,則傳回空指針。因此,在未先檢查 strchr() 的傳回值是否為空指標的情況下,不得取消引用它,以避免出現未定義的行為。此外,如果字串中沒有出現該字符,則 strchr() 的返回值不包含任何資訊。

strchrnul() 函數在幾個方面與 strchr() 不同。首先,雖然 strchr() 是標準函式庫函數,但 strchrnul() 不是,而是自 glibc 2.1.1 以來的 GNU 擴充。您可能需要定義功能測試巨集 _GNU_SOURCE 才能啟用此功能。其次,雖然 strchrnul() 傳回指向字串中第一次出現的字元的指針,但如果該字元不在字串中,則傳回指向空終止符 0 的指標。因此,取消引用 strchrnul() 的回傳值始終是安全的。此外,如果字元沒有出現在字串中,則傳回值包含一些訊息,因為它指向字串的末尾。

關於短語「終止空位元組」:C 字串是一個字元數組,其特殊屬性是字串中的最後一個字元是空位元組。當然,在 C 中,char 保證具有一個位元組的寬度。空位元組由字元文字「0」表示,但有時也稱為空終止符或 NUL 終止符(儘管這個名稱確實很具​​體)編碼,但確實存在於 ASCII 和 EBCDIC 中)。標準規定:

C11 §5.2.1 2
所有位元都設定為 0 的位元組,稱為空字符,應存在於基本執行字元集中;它用於終止字串。

網址:http://stackoverflow.com/ques...

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板