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
吗? 我不是很确定 谢谢啦
PHP中文网2017-04-17 15:26:50
あなたは正しく理解しています。
一般的な考え方は、strchrnul と strchr の違いは 1 つだけです。 c が見つからない場合、strchr は NULL を返し、strchrnul は文字列の末尾のアドレスを返します。
ringa_lee2017-04-17 15:26:50
在此里提问時我也在上提问了,上面David Bowling
的回答令小白我受益颇多,在此贴可分享下他的回复:
strchr() 関数は、文字列内で最初に出現した文字へのポインタを返し、その文字が文字列内にない場合は null ポインタを返します。したがって、未定義の動作を避けるために、最初にそれが null ポインターかどうかを確認することなく、strchr() の戻り値を逆参照しないでください。さらに、その文字が文字列内に出現しない場合、strchr() の戻り値には情報が含まれません。
strchrnul() 関数は、いくつかの点で strchr() とは異なります。まず、strchr() は標準ライブラリ関数ですが、strchrnul() は標準ライブラリ関数ではなく、glibc 2.1.1 以降の GNU 拡張機能です。この機能を有効にするには、機能テスト マクロ _GNU_SOURCE を定義する必要がある場合があります。次に、strchrnul() は文字列内で最初に出現した文字へのポインタを返しますが、その文字が文字列内にない場合は、ヌル終端文字 0 へのポインタが返されます。したがって、strchrnul() からの戻り値を逆参照しても常に安全です。さらに、その文字が文字列内に出現しない場合、戻り値には文字列の末尾を指すという情報が含まれます。
「終了ヌルバイト」というフレーズについて: C の文字列は、文字列の最後の文字がヌルバイトであるという特別な特性を持つ文字の配列です。もちろん、C では char の幅は 1 バイトであることが保証されています。null バイトは文字リテラル '0' で表されますが、null ターミネータまたは NUL ターミネータと呼ばれることもあります (ただし、この名前は実際には特殊です)エンコーディングに依存しますが、ASCII と EBCDIC には存在します)。規格には次のように記載されています:
C11 §5.2.1 2
ヌル文字と呼ばれる、すべてのビットが 0 に設定されたバイトは、基本実行文字セットに存在します。文字列を終了するために使用されます。
地址: http://stackoverflow.com/ques...