我目前正在尝试分配一个未知大小的结构。我知道以下内容有效,但我的问题是,如果我事先不知道“num”的大小,我该如何执行以下内容?当我尝试直接使用 malloc 分配 *num 且大小为 2 时,它不允许我访问 num[0] 和 num[1],就像我能够使用 int 数组指针一样。
我知道如果我不使用结构,我可以执行上述操作。例如,int A 和 malloc(10(sizeof(int *)),让我可以访问 a[0] 和 a[5]。对于结构,我似乎无法做到这一点,但我可能只是做错了什么。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct
{
char word[50];
} test;
int main(void)
{
test *num[2];
num[0]=(test *)malloc(3*sizeof(test *));
num[1]=(test *)malloc(3*sizeof(test *));
strcpy(num[0]->word, "hello");
strcpy(num[1]->word, "... you");
puts(num[0]->word);
puts(num[1]->word);
}
3*sizeof(test *)
,即指针大小的 3 倍是无意义的。更喜欢使用变量而不是 sizeof
的类型。这允许您使用通用模式type foo = malloc(sizeof *foo);
。当然,您可以使用 test **
,或者只是像这样的 test *
:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct {
char word[50];
} test;
test *create_test(size_t n) {
test *t = malloc(n *sizeof *t);
return t;
}
int main(void) {
test *num = create_test(42);
strcpy(num[0].word, "hello");
strcpy(num[41].word, "... you");
puts(num[0].word);
puts(num[41].word);
}