2011-08-15 2 views
2

char buf[MAXDATASIZE] = { 0 };{0}はどういう意味ですか?Cの "{0}"は何ですか?

は印刷しようとしましたが、何も印刷しませんでした。

#include <stdio.h> 

int main(void) 
{ 
     char buf[100] = { 0 }; 
     printf("%s",buf); 
     return 0; 
} 
+4

**ユニバーサルゼロイニシャライザです** :)これは0に設定されています(ゼロに設定されています)*(初期化用)*: 'int k = {0}; char * data = {0}; _Complex double x = {0};任意の配列[42] = {0}を構造化します。/* ... */' – pmg

答えて

12

これは配列の初期化リストです。だから、非常に通常の構文のようなものです:

char buf[5] = { 1, 2, 3, 4, 5 }; 

しかし、C標準の状態、あなたの初期化子リストに十分な要素を提供しない場合、それはデフォルトで初期化することがそれらの残りの部分を。あなたのコードでは、bufのすべての要素は0に初期化されます。

printfは、bufが実質的に長さゼロの文字列であるため、何も表示されません。

+0

だから... *最初の文字は' 0'と明示されていますが、他の文字は* default *から '0'ですか? 'char buf [100] = {65、66、67}; '最初の3つの要素として' 'A' '、' 'B'' 'C ''を持つように' 'buf'を初期化し、 *から '0 'に? 'char buf [100];は初期化されていない、つまり予期しない値(予約前にメモリに書き込まれたもの)を含んでいますか? – binaryLV

+1

@binaryLV:はい、あなたが言ったことはすべて正しいです。唯一の例外は、 'char buf [100];'をグローバルまたは静的として書くとゼロに初期化されます(他のすべてのコンテキストでは初期化されません)。 –

2

バッファに配列を割り当てています。

通常、文字列の場合、ASCII値が0の文字は文字列を終了します。

あなたはとにかく

char buf[100] = {'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', 0}; 

または

char buf[100] = "Hello world"; 

を行っている可能性があり、文字列内の「こんにちは、世界」を読み込み、文字列を入れたいと思った場合、あなたのコードは、あなたのために何も印刷しません長さゼロの文字列、つまり空の文字列を出力しようとしています。

+1

'0'と' '\ 0" 'はほぼ同じものです。最初の文字は 'int'から' char'に変換されます。 2つ目は2つの文字の配列で、どちらも同じゼロ値を持ちます。ここには移植性の問題はありません。 – pmg

+0

@pmg、ありがとうございました。 –