84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
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吗? 我不是很确定 谢谢啦
the null byte at the end of s
\0
ringa_lee
你理解的是對的。 大意是,strchrnul跟strchr的差別只有一點,strchr在找不到c的時候回傳NULL,strchrnul回傳字串末尾的位址。
在這裡提問時我也這麼上提問了,上面David Bowling的回答令小白我受益人多,在此貼出來分享下他的回覆:
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...
你理解的是對的。
大意是,strchrnul跟strchr的差別只有一點,strchr在找不到c的時候回傳NULL,strchrnul回傳字串末尾的位址。
在這裡提問時我也這麼上提問了,上面
David Bowling
的回答令小白我受益人多,在此貼出來分享下他的回覆: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...