【问题标题】:Use a struct in a header file [ C - Linux ]在头文件中使用结构 [C - Linux]
【发布时间】:2013-07-04 13:27:17
【问题描述】:

我尝试使用外部结构,但是当我编译我的 c 代码时,我收到了这条消息:

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;
}

【问题讨论】:

    标签: c linux struct xdr


    【解决方案1】:

    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
    

    【讨论】:

    • 谢谢。我接受你的回答。但是为什么我得到:分段错误错误?
    • 您必须先将内存分配到 x.data.data_val 才能引用它。当你定义一个指针时,指针包含一个随机值,所以当你引用一个随机指针时,很有可能得到一个核心转储。
    【解决方案2】:

    x.data 是一个结构体,而不是一个数组。

    如果您正试图访问,请使用x.data.data_val[0]。但是,您还没有为data_val 分配任何内存。我相信您正在尝试为data_len 分配一个数字,并且需要分配内存来保存data_val 中的data_len 值。

    【讨论】:

      【解决方案3】:

      struct Request#data 的类型是匿名 struct { u_int, float } 而不是数组。因此,您不能在其上使用 [] 运算符。

      你可能想这样做:

      x.data.data_val[0]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-29
        • 1970-01-01
        • 2011-02-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多