结构 - 尺寸未知

问题描述 投票:0回答:1

我目前正在尝试分配一个未知大小的结构。我知道以下内容有效,但我的问题是,如果我事先不知道“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);
}
c structure dynamic-memory-allocation
1个回答
0
投票

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.