2016-03-02 9 views
11

文字列をNULL終了する必要がある場合は、\0を使用するか、単純な0でも十分ですか?ヌル終了文字列: '¥0'を使用するか、0だけを使用しますか?

char a[5]; 
a[0] = 0; 

char a[5]; 
a[0] = '\0'; 

それとも\0ちょうどそれを明確に私がヌル終端ここだけど、コンパイラのためにそれがあることを確認することが好ましいを使用しての間に違いがあります同じ?

+6

C++の場合は、 'std :: string'を使用してC文字列を忘れてしまいます。 – crashmstr

答えて

8

'¥0'か0だけを使用しますか?

値に差はありません。
Cでは、タイプに違いはありません。どちらもintです。
C++では、タイプが異なります:charintです。したがって、タイプ変換が含まれていないので、エッジは'\0'になります。

さまざまなスタイルガイドは、1つを他のものに昇格させます。分かりやすくするために'\0'です。 0が混乱のないことを示します。

正解:グループのコーディング基準/ガイドラインに基づいてスタイルを使用してください。グループにこのようなガイドラインがない場合は、それを作成してください。多様なスタイルを持つよりも1つ使いやすい

7

'\0'は、タイプにかかわらず0とまったく同じです。 '\0'は、charリテラルとしての単なる表記です。タイプcharは、平文intリテラルから初期化することができます。

実際には何が良いのかは分かりませんが、コード内で一貫して使用することを心がけてください。

+0

詳細:Cでは、 '\ 0'はより適切に_文字定数と呼ばれます。リテラルCが指定するのは、_string literal_と_compound literal_です。 – chux

+3

注:Cでは ''\ 0' 'のような文字定数は' char'ではなく 'int'型です。 –

1

これは同じことです。アスキーテーブルを見てください。

「\ 0」を使用することは、文字列の終わりが明白であるため、私の考え方よりも優れています。

あなたのコードを読むときに役立ちます(0の代わりにポインタにNULLを使用するなど)。あなたはstd::stringを使用する必要がありますよりも、文字列を扱っている場合:

+2

_ "ASCIIテーブルを見てください" _ EBCDIC文字テーブルはどうですか?まだそれは本当ですか? –

14

'\0'だからサイドノート

両者の間に差がない0の値を持つ octal literalため escape sequenceです。 0は、文字値 0に変換され、 '\0'は文字値 0を書くだけで、別の方法であるよう

6

の両方が、同じマシンコードを生成します。後者は明らかに文字なので、間違いなく'0'と書くことを意味していないことが示されますが、それ以外はまったく同じことです。

+2

注:Cでは、 ''\ 0' 'のような文字定数は' char'ではなく 'int'型です。 –

関連する問題