1

標準では、 「基本実行文字セットにはC99、 と呼ばれるすべてのビットが 0 に設定されたバイトがnull character存在する必要があります。これは、文字列を終了するために使用されます。」(5.2.1.2) 次に、実行セットに含まれている必要がある 99 個の他の文字をリストします。ヌル文字がこれらの 99 文字のいずれかである文字セットを使用できますか? 特に、それは許され'0' == '\0'ますか?

編集:誰もが ASCII'0'では0x30. これは本当ですが、標準は ASCII の使用を義務付けていません。

4

5 に答える 5

3

ASCII、EBCDIC、または「自作」のいずれを使用する場合でも、自分自身について言及する理由'0'から、 とは区別する必要があります。'\0'

と呼ばれるすべてのビットが 0 に設定されたバイトnull characterは、基本実行文字セットに存在します。文字列を終了するために使用されます。(5.2.1.2)

null 文字が文字列を終了する場合、その文字列に含めることはできません。文字列に含めることができない唯一の文字です。他のすべての文字を使用できるため、0 とは区別する必要があります。

于 2013-03-25T08:48:42.810 に答える
3

リストされている各文字 (null 文字を含む) には、数字以外の値があると標準が述べているとは思いません。しかし、必要な 100 文字のうち 91 文字を表すとされる値を含む「文字セット」は、0実際には必要な 100 文字を含む文字セットではないことは明らかです。したがって、これは次のいずれかです。

  • 「文字セット」の英語定義の一部、
  • 文脈から明らかな、
  • 忠実でない実装者による故意の誤解を防ぐために、標準のテキストに記載されている非常に小さな欠陥です。

好きなのを選びな。

于 2013-03-25T09:26:06.053 に答える
2

の場合、'0'='\0'文字列の末尾と'0'値を区別することはできません。

したがって、「0_any_string」のようなものを使用するのは少し難しいでしょう'0'

于 2013-03-25T08:32:02.013 に答える
1

いいえ、できません。文字セットは、単射関数、つまり各文字を正確に 1 つの異なるバイナリ値にマップする関数によって記述される必要があります。2 つの文字を同じ値にマッピングすると、文字セットが非決定論的になります。つまり、複数の文字が一致するため、コンピュータはデータを一致する文字に解釈できなくなります。

C99 標準はnull、特定のバイナリ値への文字のマッピングを強制することによって、別の制限を課します。上記の段落を考えると、これは、他の文字が と同じ値を持つことができないことを意味しnullます。

于 2013-03-25T08:50:54.410 に答える
-1

整数定数リテラル 0 は、使用されるコンテキストに応じて異なる意味を持ちます。いずれの場合も、値が 0 の整数定数のままであり、さまざまな方法で記述されているだけです。

ポインターが定数リテラル 0 と比較されている場合、これはポインターがヌル ポインターであるかどうかを確認するためのチェックです。この 0 はヌル ポインター定数と呼ばれます。C 標準では、型 void * への 0 のキャストは、ヌル ポインターとヌル ポインター定数の両方であると定義されています。

NULL、'\0'、0 の違いは何ですか?

于 2013-03-25T08:34:01.430 に答える