Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:结构的Vec_C_Vector_Struct - Fatal编程技术网

C:结构的Vec

C:结构的Vec,c,vector,struct,C,Vector,Struct,我想创建一个结构的vec。这是我的结构: typedef struct item { char *name; int acc; } *Item; 我试过: Item vec = (Item) malloc(sizeof(Item)*max); max是以前定义的。我得到这个错误:初始值设定项元素不是常量通过以下方式更改它: typedef struct item { char *name; int acc; } Item

我想创建一个结构的vec。这是我的结构:

    typedef struct item {
        char *name;
        int acc;
    } *Item;
我试过:

    Item vec = (Item) malloc(sizeof(Item)*max);
max是以前定义的。我得到这个
错误:初始值设定项元素不是常量

通过以下方式更改它:

typedef struct item {
    char *name;
    int acc;
} Item;
(无指针),然后执行sizeof(struct item)或sizeof(item)。然后


typedef结构项{…}*项
是个糟糕的主意。想想
sizeof(Item)
做了什么,因为它是指针类型…@EugeneSh。我的评论之所以如此正确的原因之一是,错误消息与您发布的代码完全无关。如果您确实需要帮助,请发布代码。是的,局部变量可以通过函数调用初始化,但全局变量不能。全局变量只能用编译时常量初始化。如果
max
是一个常量,那么
vec
可以声明为一个数组:
struct item vec[max]。否则,您需要在确定
max
的值后的某个时间点调用
malloc
。一个始终有效的简单解决方案是
sizeof(*vec)
。但是
typedef
ing一个指针是有问题的。@iharob,同意你的说法。-看看这个问答,谢谢。我总是为马洛克做演员,但这是有道理的。
Item *vec = malloc(sizeof(Item) * max);