2

私はCに非常に慣れていないので、これが許可されているかどうか疑問に思っています。許可されている場合、どうすれば正しく実行できますか?

このコードは私にたくさんのコンパイラエラーを与えます。3文字の配列(ヌル文字'\0'に初期化)で構造体を作成し、これらの構造体の1つを。という名前で初期化しようとしていますS

struct Structure{
    char array1[3] = { '\0' };
    char array2[30]= { '\0' };
    char array3[30]= { '\0' };
} S;
4

3 に答える 3

3

いいえ、許可されていません。

Cのタイプ(あなたstruct Structureはタイプです)には値がありません。値を持つのはオブジェクトです。

構造タイプのオブジェクトを作成し、必要に応じて再帰的にすべてを初期化して、ユニバーサルゼロ初期化子と呼んでいるものを使用して0にすることができます。

struct Structure {
    char array1[3];
    char array2[30];
    char array3[30];
} S = {0};
于 2012-09-23T18:08:52.587 に答える
2

いいえ。

2つの別々のものがあります:

  1. の構造を宣言するstruct-それがどの部分でできているか。
  2. この構造体の特定のインスタンスを定義します。その際、一部またはすべてのフィールドを初期化することもできます。

コードはレイアウトを宣言するだけで、実際のインスタンスは作成しません。したがって、初期化できません。

于 2012-09-23T18:08:11.450 に答える
1

uはstructの要素の値を初期化できません。正しい初期化は次のようになります-
struct Structure s = {0};
正しい宣言は

struct Structure{
    char array1[3] ;
    char array2[30];
    char array3[30];
} S;
于 2012-09-23T18:11:09.123 に答える