c-使用malloc初始化结构中的char*vals[SIZE]



我有一个这样的结构:

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

相关内容

  • 没有找到相关文章

最新更新