使用malloc在结构中初始化char * vals [SIZE]

时间:2013-04-15 09:13:16

标签: c struct malloc

我有这样的结构:

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

如何使用malloc初始化结构?

我试过

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

但这给了我一个"在初始化器周围缺少括号"错误。

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

3 个答案:

答案 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);
}