制作参照结构[关闭]

问题描述 投票:-1回答:2

我对结构很陌生,我正在努力建立一个网上商店。我有一个结构,其中包含产品,ID,价格和指向下一个的指针。

struct product_t
{
    char *product;
    int id; 
    float price; 
    struct product_t *next;
}; 

我被要求创建一个创建函数,如下所示:

struct product_t *createProduct(char *data, int id)

所以我想创建一个名为data的新结构,其中的指针引用了产品结构:

struct data {
    struct product_t *product;
    struct product_t *price;
    struct product_t *id; 
    struct data *next;
};

但是,当我使用像我下面的创建函数时,我得到错误:

struct product_t *createProduct(char *data, int id) {
    struct data *New = malloc(sizeof(struct data));
    New->product = (char*) malloc(sizeof(char)*sizeof(data)+1);
    strcpy(New->product, data);
    New->price = price; 
    New->id = id; 
    return New;
}

编辑:

我现在看到我还不太清楚。我确实理解如何手动分配内存和东西。但重点是数据变量实际上包括价格和产品。这就是我被困住的地方,因为我不知道什么和什么不分配给内存。

有谁知道我做错了什么?我希望如果我已经足够清楚,如果不让我知道。提前致谢 :)

c struct
2个回答
1
投票

从这样的事情开始:

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

struct product_t
{
    char* data;
    int   id;
};

struct product_t* createProduct(char* data, int id)
{
    struct product_t *product = malloc(sizeof(struct product_t));

    product->data = strdup(data); // Assumes that data is a \0 terminated string.
    product->id   = id;

    return product;
}

void deleteProduct(struct product_t* product)
{
    free(product->data);
    free(product);
}

去做:

  • 添加检查以确保data不是NULL
  • 添加产品链接列表的代码。
  • 您可能需要添加强制转换,但编译器会告诉/警告您。
  • ...

问候和祝你好运!


0
投票

我猜你真的想做以下事情:

struct product_t {
    char *product;
    double price;
    int id; 
    struct product_t *next;
};

struct product_t *createProduct(char *name, double price, int id) {
    struct product_t *New = (product_t*) malloc(sizeof(struct product_t));
    New->product = (char*) malloc(strlen(name)+1);
    strcpy(New->product, name);
    New->price = price; 
    New->id = id; 
    return New;
}
© www.soinside.com 2019 - 2024. All rights reserved.