C 制作引用结构

C 制作引用结构,c,struct,C,Struct,我对structs还不太熟悉,我正在尝试制作一个用于练习的网店。我有一个结构,它包含一个产品、一个id、一个价格和一个指向下一个的指针 struct product_t { char *product; int id; float price; struct product_t *next; }; 我被要求创建一个如下所示的函数: struct product_t *createProduct(char *data, int id) 因此,我考虑创建一个

我对structs还不太熟悉,我正在尝试制作一个用于练习的网店。我有一个结构,它包含一个产品、一个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;
}
编辑:


我现在明白了,我当时还很不清楚。我知道如何手动分配内存和其他东西。但关键是数据变量实际上包括价格和产品。这就是我被困的地方,因为我不知道应该为内存分配什么和不分配什么


有人知道我做错了什么吗?我希望如果我说得够清楚,如果不让我知道的话。提前感谢:)

从以下内容开始:

#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);
}
#包括
#包括
结构产品
{
字符*数据;
int-id;
};
结构产品*createProduct(字符*数据,整数id)
{
结构产品*product=malloc(sizeof(结构产品));
product->data=strdup(data);//假定数据是以\0结尾的字符串。
产品->id=id;
退货产品;
}
void deleteProduct(结构产品*product)
{
免费(产品->数据);
免费(产品);
}
要做:

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

成功了

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

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

要么你在课堂上睡着了,要么你需要睡觉,因为这几行代码有太多问题。1。您不需要
结构数据
,直接在
产品上操作。2. 
sizeof(data)
不会做您认为它会做的事情。它是指针的大小,可能是4或8个字节。你想用
strlen()
代替(或者甚至用
strdup()
代替手动malloc'ing)。为什么要对
数据
结构的每个字段使用单独的
struct product*
呢?如果你写了“我得到错误”,请复制粘贴这些错误,以便希望帮助你的人可以看到这些错误。错误消息通常信息量很大,而且非常宝贵。
sizeof(char)*sizeof(data)+1
毫无意义。它应该是
sizeof(char)*(sizeof(data)+1)
,或者(更好)删除
sizeof(char)*
部分
sizeof(char)
定义为1。
struct data
未定义。不要强制转换
malloc()
strelen
未定义。感谢您的评论,我已修复了它。顺便说一句,re没有必要在《c》中扮演马洛克。我现在明白了,我当时还不太清楚。我知道如何手动分配内存和其他东西。但关键是数据变量实际上包括价格和产品。这就是我被困住的地方,因为我不知道应该为记忆分配什么和不分配什么。好吧,这确实是一个完全不同的故事,你既不解释也不询问。