C结构中的两个数组

时间:2015-02-28 22:39:27

标签: c arrays struct

我想创建一个包含2个数组的结构,我希望用户指定它们所拥有的变量数量。但是当我运行这个时我会遇到错误:

typedef struct Image
{
    int amount;
    char* paths[amount];
    SDL_Texture* textures[amount];

} Image;

为什么我会收到错误?如何解决?

2 个答案:

答案 0 :(得分:3)

要拥有动态数组,需要指针:

typedef struct Image
{
    int amount;
    char** paths;  // pointer to pointer of chars
    SDL_Texture** textures; // pointer to pointer of textures
} Image;

创建结构对象时,知道实际大小(“数量”),然后动态分配内存:

struct Image img;
img.paths = calloc (amount, sizeof(char*)); 
img.textures = calloc (amount, sizeof(SDL_Texture*)); 
img.amount = amount; 

当然,您需要检查分配的poitner是否为NULL。

然后,您可以像使用自己的结构一样访问这些项目。

备注: 可变长度数组是C11标准的可选功能。并非每个编译器都支持它。但无论如何,typedef永远不会允许变长数组,因为C编译器需要在编译时知道整个struct的大小。只有在数组大小为常量时才可以这样做。

答案 1 :(得分:2)

C中未授权动态数组。 必须在编译时知道大小。

你应该做的是

typedef struct Image
{
    int amount;
    char** paths;
    SDL_Texture** textures;

} Image;

Image* img = (Image*)malloc(sizeof(Image));
img->amount = 42;
img->paths = (char**)malloc(sizeof(char*) * img->amount);
img->textures = (SDL_Texture**)malloc(sizeof(SDL_Texture*) * img->amount);