2017-03-03 1 views
1
#include <stdio.h> 

struct virus 
{ 
    char signature[25]; 
    int size; 
}v[2]; 

int main(void) { 

    static v[0] = {"Yankee",1813}; 
    static v[1] = {"Doodle",2813}; 
    int i; 

    for(i=0;i<=1;i++) 
    { 
     printf("%s %d\n",v[i].signature,v[i].size); 
    } 

    return 0; 
} 

このCコードではコンパイラエラーが発生します。配列構造型の要素に値を正しく割り当てるにはどうしたらいいですか?

Error: Declaration syntax in function main()

私はv[0]v[1]は、静的クラスに関連付けられている、一方でそれはにexternクラスに関連付けられているとして、v[2]で多少の誤差があることを推測しています。

しかし、これが唯一の理由か他のものであるかどうかはわかりません。


編集:誤った構文を削除してコードを編集しました。

+0

あなたはCプログラミング言語について数時間または数日を読む必要があります。それ以前にキーボードに触れないでください。 –

+0

'main'でも' static'も削除します –

+0

@ammoQそれでも削除するのは助けになりません。まだエラーがあります。 –

答えて

5

v[2]の宣言に誤りはありませんが、問題は後であります。

あなたは試みは、デフォルトのC標準で許可されていません0 - サイズの配列を定義する

static struct v[0] = {"Yankee",1813}; 

を書きました。

しかし、構文もひどく間違っています。あなたは適切なタイプを持っていない、覚えて、struct自体はタイプではない、それはキーワードです。 struct <something>は実際にはタイプです。

論理的な観点からは、おそらく新しい変数を必要としないでしょう。 vの配列要素を使用する場合は、変数名を使用するだけです。何かのように

#include <stdio.h> 

struct virus 
{ 
    char signature[25]; 
    int size; 
}v[2] = { {"Yankee",1813}, {"Doodle",2813}}; //get it initialized, job done 

int main(void) { 

    int i; 
    for(i=0;i<=1;i++) 
    { 
     printf("%s %d\n",v[i].signature,v[i].size); 
    } 

    return 0; 
} 

は、はるかに良い方法で仕事を行います。


EDIT:

は場合は、あなたが個々の要素(ない初期化)、まあ、あなたはその目的のために中括弧で囲まれた初期化子を使用することはできませんを割り当てることに興味を持っている、あることを意味していません割り当てのためのRHSオペランド。あなたは

v[0] = (struct virus){"Yankee",1813}; 
v[1] = (struct virus){"Doodle",2813}; 

も仕事をするように、その目的のために何かをcompound literalを使用する必要があります。

+0

v [0] = {"Yankee"、1813};しかし、なぜこれも動作していないのですか? –

+0

私はv [0] = {"Yankee"、1813}と書くだけです。まだ動作していません。あなたはそれに基づいて何らかの理由を提供できますか?それに、私はあなたの答えにあなたの方法を持っています。 –

+0

@Barry私の答えで更新を確認してください。 –

0

struct宣言と変数宣言を混同しないでください。それは賢明ではありません。

代わりに、typedefのを使用します。

typedef struct 
{ 
    char signature[25]; 
    int size; 
} virus_t; 

次に、あなたがあなたのように、この型の変数をして下さい宣言することができます。

static virus_t v[2] = 
{ 
    {"Yankee",1813}, 
    {"Doodle",2813} 
}; 

それとも指定された初期化子とを:

static virus_t v[2] = 
{ 
    [0] = {"Yankee",1813}, 
    [1] = {"Doodle",2813} 
}; 
+0

ありがとう!!非常に便利 :) –

関連する問題