C:尝试为Struct动态分配空间,填充w / Data,并将指针指定给Struct

时间:2014-05-04 22:43:58

标签: c pointers struct malloc

我需要以给定格式从文本文件中获取信息:

姓氏,名字

街道地址

city,state

邮政编码


姓氏,名字

街道地址

city,state

邮政编码

等...

我假设我不知道条目的数量,所以显然我将不得不动态分配空间。我还需要使用一个指针数组来指向每个结构。目前,我只关心使用malloc分配空间,为结构赋值,将ptr分配给结构,然后输出给定的信息。我将使用IO重定向从txt文件中获取数据(我知道该怎么做)。

我得到的错误位于底部的printf()上(错误:请求成员'name',而不是结构或联合),但我怀疑我的代码有更多错误

感谢帮助。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct addressBook{

    char name [50];
    char streetAddress [50];
    char cityAndState [25];
    int zip;

};

int main(){

    int *ptr[50];

    int i, k;
    unsigned ptrCount = 0;

    for (i = 0; i != EOF; i++){

        struct addressBook *newAddress = malloc(sizeof(struct addressBook));

        gets(newAddress->name);
        gets(newAddress->streetAddress);
        gets(newAddress->cityAndState);
        scanf("%d", &newAddress->zip);

        for (k = 0; k < 50; k++){

            *ptr[k] = &newAddress;
            ptrCount++;

        }
    }

    putchar('\n');

    int z;
    for (z = 0; z < ptrCount; z++){

        printf("%s \n%s \n%s %d\n", *ptr[z].name, *ptr[z].streetAddress, *ptr[z].cityAndState, *ptr[z].zip);

    }
}

1 个答案:

答案 0 :(得分:1)

您的ptr数组被声明为指向整数的指针数组。我认为你的意思是将它声明为一个addressBook指针数组:

struct addressBook * ptr[50];

然后你可以像这样分配值:

ptr[k] = newAddress;

并按照以下方式打印:

printf("%s \n%s \n%s %d\n", ptr[z]->name, ptr[z]->streetAddress, ptr[z]->cityAndState, ptr[z]->zip);

对于我来说,有一个循环将每个新分配的addressBook对象分配给ptr数组中的50个指针中的每一个,这对我来说并没有多大意义。也许不是

for (k = 0; k < 50; k++){
   *ptr[k] = &newAddress;
   ptrCount++;
}

循环部分,你只想做一个简单的事情:

ptr[ptrCount] = newAddress;
ptrCount++;