char buf[MAXDATASIZE] = { 0 };
の{0}
はどういう意味ですか?Cの "{0}"は何ですか?
は印刷しようとしましたが、何も印刷しませんでした。
#include <stdio.h>
int main(void)
{
char buf[100] = { 0 };
printf("%s",buf);
return 0;
}
char buf[MAXDATASIZE] = { 0 };
の{0}
はどういう意味ですか?Cの "{0}"は何ですか?
は印刷しようとしましたが、何も印刷しませんでした。
#include <stdio.h>
int main(void)
{
char buf[100] = { 0 };
printf("%s",buf);
return 0;
}
これは配列の初期化リストです。だから、非常に通常の構文のようなものです:
char buf[5] = { 1, 2, 3, 4, 5 };
しかし、C標準の状態、あなたの初期化子リストに十分な要素を提供しない場合、それはデフォルトで初期化することがそれらの残りの部分を。あなたのコードでは、buf
のすべての要素は0
に初期化されます。
printf
は、buf
が実質的に長さゼロの文字列であるため、何も表示されません。
だから... *最初の文字は' 0'と明示されていますが、他の文字は* default *から '0'ですか? 'char buf [100] = {65、66、67}; '最初の3つの要素として' 'A' '、' 'B'' 'C ''を持つように' 'buf'を初期化し、 *から '0 'に? 'char buf [100];は初期化されていない、つまり予期しない値(予約前にメモリに書き込まれたもの)を含んでいますか? – binaryLV
@binaryLV:はい、あなたが言ったことはすべて正しいです。唯一の例外は、 'char buf [100];'をグローバルまたは静的として書くとゼロに初期化されます(他のすべてのコンテキストでは初期化されません)。 –
バッファに配列を割り当てています。
通常、文字列の場合、ASCII値が0の文字は文字列を終了します。
あなたはとにかく
char buf[100] = {'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', 0};
または
char buf[100] = "Hello world";
を行っている可能性があり、文字列内の「こんにちは、世界」を読み込み、文字列を入れたいと思った場合、あなたのコードは、あなたのために何も印刷しません長さゼロの文字列、つまり空の文字列を出力しようとしています。
'0'と' '\ 0" 'はほぼ同じものです。最初の文字は 'int'から' char'に変換されます。 2つ目は2つの文字の配列で、どちらも同じゼロ値を持ちます。ここには移植性の問題はありません。 – pmg
@pmg、ありがとうございました。 –
**ユニバーサルゼロイニシャライザです** :)これは0に設定されています(ゼロに設定されています)*(初期化用)*: 'int k = {0}; char * data = {0}; _Complex double x = {0};任意の配列[42] = {0}を構造化します。/* ... */' – pmg