Char,Malloc和Struct Arrays

时间:2014-03-13 20:55:58

标签: arrays struct char malloc

我还在学习C,我对char数组,malloc和结构有疑问。我有以下结构。

功能原型

typedef struct example1{
 char *name[20];
 int ex_id;
 int count;
}example;

在main.c中

example *info;
info=(example *)malloc(sizeof(example));
info->name=(char *)malloc(sizeof(char));

printf("Enter ID: ");
scanf("%d", &info[info->count].ex_id);

printf("Enter Name of ID: ");
scanf("%s", info->name[info->count];
getchar();

所以我的问题是我的结构中似乎没有malloc char * name [20]。我想用这个变量做的是动态存储固定强度长度为20个字符的名称数。基本上我想要存储的是这样的。

信息 - >名称[0] = “NAME1”;

信息 - >名称[1] = “NAME2”;

等...

1 个答案:

答案 0 :(得分:0)

char *name[20];这是一个char *数组。但是

info->name=(char *)malloc(sizeof(char));

您只分配char *数组元素指向的一个字节。如上所述,为每个索引分配20个字节:

for (i=0;i<20;i++) 
{
    info->name[i]=(char *)malloc(sizeof(char)*20); 
}

此外,您将结构指针info视为数组:

scanf("%d", &info[info->count].ex_id);

您不能这样做,因为:info->count未初始化&amp;持有垃圾价值。 并且,您通过以下方式为结构的一个对象分配了空间:

info=(example *)malloc(sizeof(example));

使&info[info->count]仅在info->count = 0时有效,其余部分则未分配任何空格。