首页 文章

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

提问于
浏览
-4

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

姓氏,名字

街道地址

市,州

邮政编码


姓氏,名字

街道地址

市,州

邮政编码

等等...

我假设我不知道条目的数量,所以显然我将不得不动态分配空间 . 我还需要使用一个指针数组来指向每个结构 . 目前,我只关心使用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 回答

  • 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++;
    

相关问题