在C中将值从struct分配给数组

时间:2016-06-30 10:36:21

标签: c arrays struct

如何将结构的先前读取元素分配给空(新)数组?

在以下示例中,在struct2的每个输入元素之后,应将其存储到新数组arr

此示例提供 SIGSEGV 分段错误。

有人可以指出如何解决这个问题吗?

修改

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

typedef struct
{
    int id;
    char name[30];
    float price;
}PRODUCT;

typedef struct
{
    int prodNumRep;
    PRODUCT *productsRep;
    float *quantityRep;
}REPOSITORY;

void inputProd(PRODUCT *prod)
{
    printf("ID: ");
    scanf("%d",&prod->id);
    printf("Name: ");
    scanf("%s",prod->name);
    printf("Price: ");
    scanf("%f",&prod->price);
}

void inputRep(REPOSITORY *rep)
{

    printf("REPOSITORY: \n");
    printf("Number of products: ");
    scanf("%d",&rep->prodNumRep);

    rep->productsRep=calloc(rep->prodNumRep,sizeof(*rep->productsRep));
    rep->quantityRep=malloc(rep->prodNumRep*sizeof(float));

    //new array
    REPOSITORY *arr;
    arr=(REPOSITORY*)malloc(rep->prodNumRep * sizeof(REPOSITORY));

    int i;
    for(i=0;i<rep->prodNumRep;i++)
    {
            printf("%d. product: \n",i+1);
            inputProd(rep->productsRep+i);
            printf("Quantity: ");
            scanf("%f",&rep->quantityRep[i]);

            //assign struct2 (previously read with inputStruct1) to   array - SIGSEGV segmentation fault
            arr->productsRep[i]=rep->productsRep[i];
            arr->quantityRep[i]=rep->quantityRep[i];

    }
}

int main()
{
    REPOSITORY *rep;
    rep=(REPOSITORY *)malloc(sizeof(REPOSITORY));
    inputRep(rep);

    return 0;
}

2 个答案:

答案 0 :(得分:3)

您的问题是arr->productsRep[i]实际上是在尝试取消引用productsRep上的指针,但是您没有为productsRep分配任何内存。我看到你正在尝试做什么,但我认为你需要重新构建你的逻辑和执行流程。

答案 1 :(得分:1)

无需在函数中声明新数组。从函数中删除以下语句

//new array
REPOSITORY *arr;
arr=(REPOSITORY*)malloc(rep->prodNumRep * sizeof(REPOSITORY));

        //assign struct2 (previously read with inputStruct1) to   array - SIGSEGV segmentation fault
        arr->productsRep[i]=rep->productsRep[i];
        arr->quantityRep[i]=rep->quantityRep[i];