我还在学习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”;
等...
答案 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时有效,其余部分则未分配任何空格。