制作参照结构

时间:2017-12-18 19:03:52

标签: c struct

我对结构很新,我正在努力建立一个网上商店。我有一个结构,其中包含产品,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;
};

但是当我像下面的方法一样使用create函数时,我会遇到错误:

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;
}

编辑:

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

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

2 个答案:

答案 0 :(得分: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
  • 为产品链接列表添加代码。
  • 您可能需要添加强制转换,但编译器会告诉/警告您。
  • ...

Groetjes en succes!

答案 1 :(得分: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;
}