C 制作引用结构
我对structs还不太熟悉,我正在尝试制作一个用于练习的网店。我有一个结构,它包含一个产品、一个id、一个价格和一个指向下一个的指针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) 因此,我考虑创建一个
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》中扮演马洛克。我现在明白了,我当时还不太清楚。我知道如何手动分配内存和其他东西。但关键是数据变量实际上包括价格和产品。这就是我被困住的地方,因为我不知道应该为记忆分配什么和不分配什么。好吧,这确实是一个完全不同的故事,你既不解释也不询问。