我需要帮助才能解决问题。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct p_prodotto {
char *costo;
char *quantita;
};
typedef struct p_prodotto id_prezzo;
struct partecipante {
id_prezzo *prezzo;
unsigned short codice;
};
struct partecipante persona[1] = {{{"We", "Ciao"},100}};
int main()
{
printf ("%s", persona[0].prezzo.costo); // This doesn't works
return 0;
}
我有结构p_prodotto,里面有两个char指针。有typedef,然后有另一个结构“partecipante”调用上面的结构类型。
这是结构的结构吗?如果是这样,我需要创建一个数组。我是这样做的:
struct partecipante persona[1] = {{{"We", "Ciao"},100}};
我做错了吗?如果它是正确的,我如何访问“costo”和“quantita”字段?
提前感谢您的帮助。
答案 0 :(得分:3)
struct partecipante persona[1] = {{{"We", "Ciao"},100}};
将struct的第一个成员初始化为struct p_prodotto
,但它被声明为指向该成员的指针。将struct partecipante
更改为
struct partecipante {
id_prezzo prezzo;
unsigned short codice;
};
或以不同的方式初始化它。
例如
id_prezzo prz = {"We", "Ciao"};
struct partecipante persona[1] = {{&prz,100}};
int main()
{
printf ("%s", persona[0].prezzo->costo);
return 0;
}
如果您无法更改struct p_prodotto
的定义。
答案 1 :(得分:2)
1-您的代码甚至无法在gcc上编译。
2-你正在以错误的方式初始化你的结构,并且你正在使用POINTERS来构造结构而不是真正的结构(你要留下需要通过类似malloc而不是真实结构来初始化的存根)
3-为什么[1]阵列?让我们把它关闭并使用彻头彻尾的基础知识,一个简单的条目入门: - )
struct partecipante {
id_prezzo *prezzo;
unsigned short codice;
};
id_prezo * prezzo指向一个结构,但本身没有空间来保存数据....因为我看到你仍在学习基础知识,让我们把它关掉并让它保存真实数据(以牺牲成为代价)更有活力,你不想要现在,因为你正在学习)。
struct partecipante {
id_prezzo prezzo; // the partecipante struct now holds enough space to fit a id_prezzo inside it
unsigned short codice;
};
struct partecipante persona; //这为一个人提供了空间
int main()
{
persona.prezzo.costo = "blabla this is costo";
persona.prezzo.quantita = "blabla this is quantita";
persona.codice = 123;
printf ("Costo is --> %s\n", persona.prezzo.costo); // This know WORKS!
return 0;
}
我不会发布完成的源代码,因此您可以自己使用修补程序并进行演变。祝你好运!
答案 2 :(得分:1)
答案 3 :(得分:1)
问题在于:
id_prezzo *prezzo;
您将'prezzo'定义为指针类型,但将其创建为结构,而不是指向结构的指针:
{"We", "Ciao"}
您有两种选择,最简单的方法是简单地改变它:
id_prezzo *prezzo;
对此:
id_prezzo prezzo;
或者,您可以使用malloc()
/ free()
为您创建指向结构的指针:
id_prezzo *myPrezzo = malloc(sizeof(id_prezzo));
myPrezzo->costo = "We";
myPrezzo->quantita = "Ciao";
persona[0].prezzo = myPrezzo;
// after you are done with persona:
free(myPrezzo);
或者,您可以使用alloca()
或获取本地结构变量的地址,它实际上取决于结构的生命周期。