2012-07-14 66 views
-2

我正在編寫程序,無法理解編譯器錯誤。結構類型/函數調用

arrays.c:12:21: error: flexible array member not at end of struct 
arrays.c: In function 'insert': 
arrays.c:22:4: warning: statement with no effect 

我知道這些都是非常簡單的事情,但我無法修復它們。我不確定我的插入功能是否正確。誰能幫幫我嗎?感謝

#include <stdio.h> 

#define AMOUNT 7 




    return 0; 
} 
+0

這看起來像一個學生項目。你想讓我們做你的功課嗎? – YePhIcK 2012-07-14 19:33:09

+0

不是真的,只是想明白我的問題是什麼 – 2012-07-14 19:35:51

回答

1

與空的方括號[]聲明的結構構件被稱爲柔性陣列構件。這在comp.lang.c FAQ,問題2.6(滾動至底部)中有解釋。一個靈活的數組成員可能只會作爲結構的最後聲明成員出現,這是編譯器所抱怨的。

但是將它移動到結構的末尾並不是最好的解決方案;你可能根本不想使用靈活的數組成員。 (你可以,但它引入了不必要的複雜性。)

由於dasblinkenlight說,你可以使name成員的指針:然後

struct person { 
    char *name; 
    int age; 
}; 

name將指向代表這個人的名字的字符串 - 這意味着你需要分配內存來保存字符串。

也可以使namechar陣列,具有固定的最大尺寸:

#define MAX_NAME 50 
struct person { 
    char name[MAX_NAME]; 
    int age; 
}; 

然後,您可以使用strcpy函數的值複製到name - 小心不要嘗試複製超過MAX_NAME字節。

在你insert功能,這些語句:

people[nextcell].names; 
people[nextcell].ages; 

據推測打算初始化namesages成員(更好的名稱:nameage),但實際上他們什麼都不做;他們指的是那些成員,但他們沒有對他們做任何事情。對於age,你可以簡單的age參數的值(您當前忽略)分配給age成員:

people[nextcell].age = age; 

的方式分配一個值name取決於您是否決定將其定義爲一個指針或一個數組。

+0

非常感謝您的幫助! – 2012-07-14 20:23:26