我有一个这样的结构:
struct students {
char *names[MAXLENGTH];
};
如何使用malloc
初始化结构?
我试过
struct students student1 = {malloc(MAXLENGTH * sizeof(char**))};
但这给了我一个"初始化器周围缺少大括号"的错误。
我是C的新手,所以我不知道如何解决这个问题。
您可以分配如下结构的实例:
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()
。
这是完全错误的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 .
您必须使用这样的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);
}