java int 动态_结构的动态内存分配,但是它的int或double成员呢

我将非常感谢查看我的代码并告诉我是否创建了一个动态分配内存的结构,是否应该为结构的int或double元素动态分配内存?

正如在下面的例子中可以看到的,我只将malloc用于大小可以改变的结构元素,即字符串 . 我试图将malloc用于int或double变量(结构的元素),但一切正常,直到我尝试在它们上使用函数printf .

它拒绝工作因为printf(“%d”,[structure] - > [int element])不正确 .

所以我更改了代码并使用malloc和realloc函数处理了int和double结构成员 . 这种方法是否正确?

对于int或double结构成员/元素使用malloc和realloc是否可以预期甚至可能?以后如何使用printf?

#include

#include

#include

#define LICZBA 2

#define SIZE 256

typedef struct ksiazka{

char * imie;

char * nazwisko;

char * tytul;

int numerkat;

double cena;

}rekord;

rekord * rekordnew(){

rekord *r;

r=malloc(sizeof(rekord));

r->imie=NULL;

r->nazwisko=NULL;

r->tytul=NULL;

r->numerkat=0;

r->cena=0;

return r;

}

void rekordfree(rekord *r){

if (r->imie) free (r->imie);

if (r->nazwisko) free (r-> nazwisko);

if (r-> tytul) free (r-> tytul);

//if (r-> numerkat) free (r->numerkat);

//if (r-> cena) free (r-> cena);

free (r);

}

void wpiszimie(rekord *pr, char im[SIZE]){

(*pr).imie=realloc(pr->imie, strlen(im)+1);

strcpy(pr->imie, im);

}

void wpisznazwisko(rekord *pr, char nazw[SIZE]){

pr->nazwisko=realloc(pr->nazwisko, strlen(nazw)+1);

strcpy(pr->nazwisko, nazw);

}

void wpisztytul(rekord *pr, char tyt[SIZE]){

pr->tytul=realloc(pr->tytul, strlen(tyt)+1);

strcpy(pr->tytul, tyt);

}

void wpisznumerkat(rekord *pr, int numer){

// pr->numerkat=realloc(pr->numerkat, sizeof(int));

pr->numerkat=numer;

}

void wpiszcena(rekord *pr, double cen){

// pr->cena=realloc(pr->cena,sizeof(double));

pr->cena=cen;

}

int main(){

rekord *r[LICZBA];

char bufor[SIZE];

int i, number;

double number2;

for(i=0;i

r[i]=rekordnew();

}

for(i=0;i

printf("Podaj tytuł książki");

scanf("%s", bufor);

wpisztytul(r[i],bufor);

printf("Podaj imię autora książki");

if (scanf("%s", bufor)==1)wpiszimie(r[i],bufor);

printf("Podaj nazwisko autora książki");

if (scanf("%s", bufor)==1)wpisznazwisko(r[i],bufor);

printf("Podaj numer katalogowy książki");

if (scanf("%d", &number)==1)wpisznumerkat(r[i],number);

printf("Podaj cenę książki");

if (scanf("%lf", &number2)==1)wpiszcena(r[i],number2);

}

for(i=0;i

printf("Tytuł książki");

printf("%s", r[i]->tytul);

printf("Imię autora książki");

printf("%s", r[i]->imie);

printf("Nazwisko autora książki");

printf("%s", r[i]->nazwisko);

printf("Numer katalogowy książki");

printf("%d", r[i]->numerkat);

printf("Cena książki");

printf("%lf", r[i]->cena);

}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值