2017-02-18 14 views
-4

strchrnul()関数は、cがs中に見つからない であれば、それはむしろ、 sの末尾のヌルバイトへのポインタを返すことを除いて、strchr()のようなものですNULLよりも。具体的な意味は、

thisマニュアルページのstrchrnualの説明です。私はthe null byte at the end of sの具体的な意味を理解していません。

ありがとうございました!

+3

これは、通常はC文字列の最後のバイトである最初の '\ 0'のアドレスを返します。 – n0p

+1

@ n0pなぜ答えではなくコメントとして回答を投稿していますか? –

+0

@JesperJuhlどうしたの? – n0p

答えて

1

strchr()関数は、文字列内の文字の最初の出現を指すポインタ、または文字が文字列内にない場合はnullポインタを返します。したがって、未定義の動作を回避するためにnullポインタであるかどうか最初にチェックすることなく、戻り値strchr()を参照しないでください。

strchrnul()の機能は、いくつかの点でstrchr()とは異なります。まず、strchr()は標準ライブラリ関数ですが、strchrnul()ではなくglibc 2.1.1以降のGNU拡張です。この機能を有効にするには、機能テストマクロ_GNU_SOURCEを定義する必要があります。第2に、strchrnul()は、文字列中の文字の最初の出現を指すポインタを返しますが、文字が文字列内にない場合はヌルターミネータへのポインタ\0が返されます。したがって、戻り値をstrchrnul()から参照解除することは常に安全です。文字列内に文字がない場合、戻り値は文字列の終わり(終端ヌルバイト)を指し、このポインタの逆参照は0の値になります。おそらく、関数strchrnul()は、関数が検索された文字へのポインタまたはヌルバイトへのポインタを返すため、その名前を取得します。

「nullバイトを終了」というフレーズについて:C文字列は、charの配列で、文字列の最後のがヌルバイトであるという特別な特性を持っています。もちろん、charは、Cで1バイトの幅を持つことが保証されています。ヌルバイトは文字リテラル'\0'で表されますが、ヌルターミネータまたはNULターミネータとも呼ばれます(この名前は実際にはエンコードされていますが、ASCIIとEBCDICで存在します)。 ;

C11§5.2.12
0に設定されたすべてのビットとバイトは、基本実行文字セットに存在するものとし、ヌル 文字と呼ばれる:標準と述べています文字列の終了には が使用されます。

関連する問題