編集:OP(または編集者)は、この回答を提供した後、元の質問の一重引用符の一部を二重引用符に静かに変更しました。
あなたのコードはコンパイラ エラーになります。最初のコード フラグメント:
char buf[10] ; buf = ''
二重に違法です。まず、C では空の などというものはありませんchar
。次のように、二重引用符を使用して空の文字列を指定できます。
char* buf = "";
これにより、文字列へのポインターNUL
、つまりその文字のみを含む単一文字の文字列が得られNUL
ます。しかし、中に何もない単一引用符を使用することはできません。これは未定義です。NUL
文字を指定する必要がある場合は、次のように指定する必要があります。
char buf = '\0';
文字 と区別するためにバックスラッシュが必要'0'
です。
char buf = 0;
同じことを達成しますが、前者の方が読みにくいと思います。
第 2 に、配列を定義した後で配列を初期化することはできません。
char buf[10];
配列を宣言および定義します。配列識別子はメモリ内のアドレスになり、割り当てによってポイントをbuf
変更することはできません。buf
そう
buf = // anything on RHS
違法です。このため、2 番目と 3 番目のコード フラグメントは違法です。
配列を初期化するには、定義時に行う必要があります。
char buf [10] = ' ';
最初の char がスペース'\040'
で残りが. のNUL
ような 10 文字の配列が得られます'\0'
。配列が初期化子で宣言および定義されると、指定された初期値を持つ配列要素を超える配列要素 (存在する場合) は、自動的に で埋められ0
ます。「ランダムなコンテンツ」はありません。
次のように、配列を宣言して定義するが、初期化しない場合:
char buf [10];
すべての要素にランダムなコンテンツが含まれます。