我有这样的结构:
struct students {
char *names[MAXLENGTH];
};
如何使用malloc
初始化结构?
我试过
struct students student1 = {malloc(MAXLENGTH * sizeof(char**))};
但这给了我一个"在初始化器周围缺少括号"错误。
我是C的新手,所以我不确定如何解决这个问题。
答案 0 :(得分:1)
这是完全错误的struct students student1 = {malloc(MAXLENGTH * sizeof(char**))};
试试这段代码。
struct students* Student1 = malloc(sizeof(struct students ));
Student1->names[0] = malloc(sizeof(NAME_MAX));
scanf("%s",Student1->names[0]);//It may be first name. I think you want like this .
答案 1 :(得分:1)
您可以像这样分配结构的实例:
struct students *pStudent = malloc(sizeof *pStudent);
这将分配字符串指针数组(因为它是struct students
的一部分),但是没有将指针设置为指向任何东西(它们的值将是未定义的)。
您需要设置每个单独的字符串指针,例如:
pStudent->names[0] = "unwind";
这存储了一个指向文字字符串的指针。您还可以动态分配内存:
pStudent->names[1] = malloc(20);
strcpy(pStudent->names[1], "unwind");
当然,如果你malloc()
空间,你必须记住free()
它。不要将文字字符串与动态分配的字符串混合,因为无法知道哪些字符串需要free()
。
答案 2 :(得分:0)
你必须像这样使用for循环:
#define MAX_NAME_LENGTH 20
struct student s;
for(int i = 0; i < MAXLENGTH; ++i)
{
s.names[i] = malloc(sizeof(char) * MAX_NAME_LENGTH);
}