2016-02-18 107 views
1

我正試圖編寫一個程序,將信息從內核空間傳遞到ububtu 14.04上的用戶空間。我宣佈一個struct爲如下:數組類型具有不完整的元素類型?

typedef struct 
{ 
    long pid; 
    char TTY[64]; 
    unsigned long long time; 
    char COMM[64] 
    } myTasks; 

在主,我然後創建myTasks結構數組喜歡:

struct myTasks taskInfo[2500]; 
//do stuff 
syscall(__NR_my_syscall2,numTasks,sizeof(taskInfo),taskInfo); // use it here 

然而,當我這樣做,我得到這條線的錯誤說法:

struct myTasks taskInfo[2500] Error: array type has incomplete element

我在做什麼錯?我想創建一個myTasks結構數組,我可以將它作爲緩衝區傳遞給系統調用...但我無法弄清楚我做錯了什麼。我是C的新手,所以任何幫助將不勝感激。

+1

你確定系統調用嗎?你不錯過某個地方的圓括號嗎? –

+0

@JoachimPileborg謝謝!然而,幸虧它只是我在這裏輸入它的一個錯誤:) – ocean800

回答

2

typedef將匿名結構編輯爲myTasks。要聲明你的數組,使用myTasks taskInfo[2500]

C認爲你正在聲明一個名爲的新的結構struct myTasks,它不完整,因爲你沒有定義結構。但是,myTasks是您已經定義的結構的別名。

+1

哦..所以這是我對結構的理解問題?所以我應該看看像[this](http://stackoverflow.com/questions/1675351/typedef-struct-vs-struct-definitions)? – ocean800

+1

是的,這是一個很好的資源!看起來你對結構的命名有些困惑。在您提供的代碼中,您定義的結構沒有名稱;它是*匿名*。您將'myTasks'聲明爲該結構類型的別名。所以這就像分配一個暱稱給結構。後來,你試圖聲明一個包含'struct myTask's的數組,而'struct myTask'實際上並不存在。 C認爲你要在那裏聲明一個新的結構,並且既然你沒有,它會給出錯誤。 – Purag

+0

謝謝!這使得更多的意義,我肯定會更多地閱讀該鏈接。 – ocean800

2

myTasks類型別名而不是結構名稱。正確使用它是例如

myTasks taskInfo[2500]; 
+0

感謝您的回答! :) – ocean800

相關問題