这段代码:
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[])
您没有使用 argc
或 argv
, 所以你最好使用以下的替代声明:
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/