2013-07-04 33 views
0

我試圖用一個外部結構,但是當我編譯我的C代碼我得到這樣的信息:在頭文件中使用的結構體[C - 的Linux]

subscripted value is neither array nor pointer nor vector

爲什麼?

messaggio.h

struct Request { 
    struct { 
     u_int data_len; 
     float *data_val; 
    } data; 
    bool_t last; 
}; 
typedef struct Request Request; 

的main.c

#include "messaggio.h" 

int main(void){ 
struct Request x; 
x.data[0] = 4.6; 
printf("%f\n",x.data[0]); 
return 0; 
} 

回答

2

x.data是一個結構,所以你不能使用它[]。也許你想要x.data.data_val[0]

嘗試此代碼:

struct Request x; 
x.data.data_len = 5; // initialize the length, use any value you need 
x.data.data_val = (float *) malloc(x.data.data_len * sizeof(float)); 
x.data.data_val[0] = 4.6 
+0

感謝。我goig接受你的答案。但爲什麼我得到:分段錯誤錯誤? – user2467899

+0

在引用它之前,您必須將malloc內存設置爲x.data.data_val。當你定義一個指針時,指針包含一個隨機值,所以當你引用一個隨機指針時,很可能得到一個核心轉儲。 – TieDad

0

x.data是一個結構,而不是陣列。

如果這是您嘗試訪問的內容,請使用x.data.data_val[0]。但是,您尚未爲data_val分配任何內存。我相信你正在嘗試給data_len分配一個數字,並且需要分配內存以保存data_lendata_val

0

類型結構請求#數據是匿名結構{u_int,浮子}而不是陣列。因此你不能在其上使用[]運算符。

你可能想要做的:

x.data.data_val[0]