2017-09-27 11 views
0

(宿題に関する質問) 私はC言語を学んでいます。ファイルからデータを読み込み、そのデータのルーターを作成し、サイズ255の配列内のルータが、私は、私は同じエラーで、私は多数のスレッドを検索したサブスクリプトされた値は、配列インデックスでも配列もポインタもベクトルでもありません

#define ARRAY_SIZE 255 
struct router routers[ARRAY_SIZE] = {0}; 

int main(int argc, char *argv[]){ 
    unsigned char id; 
    char name[32]; 
    struct router *new_router; 

    if(argc == 2){ 
    //reads file with fread 
    //setting id and name which prints out as expected 

    new_router = make_router(id, name); //initialising method that returns a router pointer 
    routers[new_router->id] = new_router; 
    //error occurs here, at [new_router->id]. Have also tried just using id 
    } 
} 

配列に追加しようとしているライン上のタイトルのエラーを取得維持しますメッセージは、配列を宣言していない人、またはインデックス番号としてunsigned charで試してみる人がいます。これはすでに使用しています。これについてのいくつかの洞察が大好きです。

struct router{ 
    unsigned char id; 
    char name[32]; 
} 

struct router* make_router(unsigned char id, char* name){ 
    struct router *r = malloc(sizeof(struct router)); 

    r->id = id; 
    r->name = name; 

    return r; 
} 
+0

「ルータ」の定義はどこですか? –

+0

ルータはidのためのunsigned charとchar *の名前を持つ非常に基本的な構造体です – Telanore

+0

それが基本的であれば、私のようなコメントを避けるために質問に入れることができます。また 'make_router'定義も必要です。 –

答えて

1

routers[new_router->id] = *new_router; // note * 

は、コンパイラエラーを解決し、その後、動的構造体を割り当てます。

ただし、ポインタのメンバがの場合、このような構造体はコピーできません。あなたは、 "ルーターはIDのための符号なしの文字と名前のためのchar *を持つ単なる基本的な構造体です"と言います。しかし、このような割り当てをすれば、指差しデータのハードコピーは得られません。

ポインタはデータではありません。彼らはデータを含んでいません。彼らは他の場所に割り当てられたデータを指しています。

おそらくあなたが実際に探しているのは、別の答えで示唆されているように、ポインタの配列です。もしそうなら、このプログラムを書き直す必要があります。

0

この:

struct router routers[ARRAY_SIZE] = {0}; 

routersARRAY_SIZE構造体の配列であることを意味します。構造体へのポインタではなく、これは次のようなものです。

routers[new_router->id] = new_router; 

要素の1つに割り当てようとしています。

make_router()が動的にメモリを割り当てている場合は、修正プログラムがポインタの配列の中に配列宣言を変更することが考えられます:

struct router * routers[ARRAY_SIZE]; 
      ^
       | 
      way 
      important 

EDIT:もちろん、私は、実際の宣言があったと仮定struct routerどこか省略しただけです。完全性のために、それを含めるのは良い考えかもしれません。 make_routerと仮定すると

+0

異なるエラーが発生するはずです。私は思う.. –

+0

まだ正確に同じエラーが生成されます – Telanore

関連する問題