我怎样才能处理一系列结构?

时间:2010-11-18 02:00:10

标签: c arrays pointers struct

我有这个结构:

#define sbuffer 128
#define xbuffer 1024

typedef struct{
    char name[sbuffer];
    char att[sbuffer];
    char type[sbuffer];
    int noOfVal;
    int ints[xbuffer];
    double doubles[xbuffer];
    char *strings[xbuffer];
} variable;

我需要从这个结构创建一个数组,我做了这个

variable *vars[512]; //is it right

如果我想将s中包含的字符串放入名称中,我就这样做了:

char *s = "What Ever";
strcpy(vars[0]->name,s);

但这对我不起作用,有人可以帮忙吗?

4 个答案:

答案 0 :(得分:5)

摆脱这一行中的*

variable *vars[512]; //is it right

使用点语法访问strcpy中的结构成员:

char *s = "What Ever";
strcpy(vars[0].name,s); 

答案 1 :(得分:1)

您已经为您的struct分配了一个指针数组,但从未创建过它们的实例(已分配的内存)。你可以使它成为一个结构数组(没有指针),所以你不必担心内存管理。

char *s = "What Ever";
variable vars[512]; /* an array of your structure */
strcpy(vars[0].name,s); /* <- use dot operator here since they are no longer pointers */

或者至少在使用它之前为结构分配内存(并初始化所有其他指向NULL的内容)。

char *s = "What Ever";
variable *vars[512]; /* an array of pointers to your structure */
vars[0] = (variable *)malloc(sizeof(variable)); /* dynamically allocate the memory */
strcpy(vars[0]->name,s); /* <- used arrow operator since they are pointers */

答案 2 :(得分:0)

我认为你需要使用

variable vars[512];

而不是

variable *vars[512]

答案 3 :(得分:0)

variable *vars[512] = {NULL};

int i = 0;

//i may get a value in some way

if (NULL == vars[i]){
    vars[i] = (variable *)malloc(sizeof(struct variable));
}