【发布时间】:2014-12-30 11:44:21
【问题描述】:
我正在开发一个包含指向结构的指针数组的 C 程序。 首先结构看起来像这样:
typedef struct
{
int ID;
char Name [20];
} rec;
然后我有一个创建这些结构之一的函数:
struct rec* addEntry(){
rec *temp;
temp = malloc(sizeof(rec));
printf("Please give me an ID number\n");
scanf("%d", &temp->ID);
printf("Now give me a name, maximum size for this is 20 characters\n");
scanf("%s", &temp->Name);
return temp;
}
现在这个函数可以正常工作了,它创建结构并返回指向该结构的指针 然后我有另一个函数,它创建一个指针数组并用指向结构的指针填充它:
struct rec* returnPointerToPointerArray()
{
rec *pointerArray[2];
pointerArray[0] = addEntry();
pointerArray[1] = addEntry();
printf("ID in main : %d\n", pointerArray[0]->ID);
printf("Name in main : %s\n", pointerArray[0]->Name);
printf("ID in main : %d\n", pointerArray[1]->ID);
printf("Name in main : %s\n", pointerArray[1]->Name);
pointerArray = malloc(sizeof(rec*)*2);
return pointerArray;
}
为了检查发生了什么,我打印了存储在指针数组中的位置的值。 此时指针数组中的值是正确的。
但是现在我需要为这个指针数组分配空间并返回一个指向这个指针数组的指针,这就是我卡住的地方。
malloc 行给了我一个错误:
error: incompatible types when assigning to type 'struct rec *[(sizetype)(size)]' from type 'void *'
现在澄清我不能使用链表,我必须使用指针数组。 要添加到我的主循环中,我在以下代码中还有另一个错误:
rec *pointerArray[2];
pointerArray = returnPointerToPointerArray(2);
printf("ID in main : %d\n", pointerArray[0]->ID);
printf("Name in main : %s\n", pointerArray[0]->Name);
这给了我以下错误:
error: incompatible types when assigning to type 'struct rec *[2]' from type 'struct rec *'
欢迎任何帮助。
提前致谢,伊尔瓦
【问题讨论】:
-
'pointerArray = malloc(sizeof(rec*)*2);'因为您已经尝试在其中存储东西,所以无法正常工作,而且对于您的意图来说已经太晚了。 'pointerArray' 是一个自动存储数组,不是指针,所以不能 malloc。
-
但是如果我返回一个指向该数组的指针,那么该数组不会消失,因为它是在本地声明的?
-
您已经在这两个函数中创建了指向 struct 的指针,而没有在使用它们之前将它们初始化为指向任何地方。我写了下面的例子(第一次写的时候有错误,现在已经测试过了)
-
你能告诉用户如何利用你的缓冲区溢出,真是太好了。
-
struct rec未在任何地方定义。如果你写struct rec *,那么它定义了一个新类型,它与rec不兼容。