gpt4 book ai didi

c - C 中的结构指针数组,无效的初始值设定项错误

转载 作者:太空狗 更新时间:2023-10-29 15:30:09 25 4
gpt4 key购买 nike

这段代码:

extern void *malloc(unsigned int);
struct Box {
int x, y ,w, h;
};

struct Wall {
char color[15];
struct Box *boxes[20];
};

int main(int argc, const char *argv[])
{
struct Wall *mywall = malloc(sizeof(struct Wall));
struct Box *myboxes[] = mywall->boxes;
return 0;
}

在第 14 行给我 invalid initializer 错误。我想做的是获取结构指针数组的副本,它们位于不同的结构中。

最佳答案

哎哟;这里有很多问题。

extern void *malloc(unsigned int);

不要那样做;使用 #include <stdlib.h>因为那是正确的,而你写的通常是不正确的(malloc() 的参数是 size_t ,不一定是 unsigned int ;它可能是 unsigned long 或其他类型)。

struct Box {
int x, y ,w, h;
};

除了不稳定的空间,struct Box没问题。

struct Wall {
char color[15];
struct Box *boxes[20];
};

struct Wall也可以。

int main(int argc, const char *argv[])

您没有使用 argcargv , 所以你最好使用以下的替代声明:

int main(void)

还是原来的代码:

{
struct Wall *mywall = malloc(sizeof(struct Wall));

这分配但不初始化单个 struct Wall .就其本身而言,它是可以的,但您应该在使用之前检查分配是否成功。您还需要担心分配 struct Box数组元素将指向的项。

    struct Box *myboxes[] = mywall->boxes;

你手头上有一场小灾难。你不能那样复制数组。你还没有检查你有一个数组。忽略错误检查,您会遇到以下情况之一:

    struct Box *myboxes[] = { &mywall->boxes[0], &mywall->boxes[1], ... };

或:

    struct Box **myboxes = &mywall->boxes;

我不相信你会想要第二个版本,因为它更短。

    return 0;

我喜欢看return 0;main() 的末尾,即使 C99 允许您省略它。

}

关于c - C 中的结构指针数组,无效的初始值设定项错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9708397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com