2017-09-27 79 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

'router'的定義在哪裏? –

+0

路由器是一個無符號字符的ID,和一個char *名稱 – Telanore

+0

一個非常基本的結構。如果它是一個基本的,你可以把這個問題以避免像我這樣的評論。還需要'make_router'的定義。 –

回答

1

假設make_router動態分配一個結構,然後

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

解決了編譯錯誤。

但是,如果他們有指針成員,則不能複製像這樣的結構。你說,「路由器只是一個基本的結構,無符號字符爲id,char *爲名字」,所以情況就是如此。但是像這樣的任務,你不會得到指向數據的硬拷貝。

指針沒有數據。他們不包含數據。他們指出在別處分配的數據。

那麼可能就是你實際上是尋找的是一個指針數組,在另一個答案建議。如果是這樣,你必須重新編寫這個程序。

0

此:

struct router routers[ARRAY_SIZE] = {0}; 

裝置routersARRAY_SIZE結構的陣列。不指向結構,這是什麼:

routers[new_router->id] = new_router; 

正試圖分配到其中一個元素。

如果make_router()是動態分配內存,修復可能改變數組聲明爲指針數組:

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

編輯:當然,我認爲有一個實際申報struct router你剛剛省略的地方。爲了完整起見,包括它可能是一個好主意。

+0

它應該產生一個不同的錯誤。我認爲.. –

+0

仍然會產生完全相同的錯誤 – Telanore

相關問題