1

我有一个这样的结构:

struct students {
    char *names[MAXLENGTH];
};

我将如何使用初始化结构malloc

我试过了

struct students student1 = {malloc(MAXLENGTH * sizeof(char**))};

但这给了我一个“初始化器周围缺少大括号”的错误。

我是 C 新手,所以我不确定如何解决这个问题。

4

3 回答 3

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 .
于 2013-04-15T09:18:22.550 回答
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()ing。

于 2013-04-15T09:20:39.670 回答
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);
}
于 2013-04-15T09:23:29.323 回答