为什么我的结构不显示?

时间:2015-10-06 00:25:41

标签: c structure dynamic-memory-allocation

我正在研究这种结构内存分配。有人可以帮我弄清楚它为什么显示作者,标题和身份的空白。输入不会继续在打印功能上传递,我无法弄清楚原因。这是我的代码:

#include <stdio.h>
#include <stdlib.h>

struct book{
 char author[16];
 char title[16];
 int id; 
};

int i, n;

void add_records(struct book *b);
void print_records(struct book *b);

int main(int argc, char *argv) {

struct book *someBook; 
someBook = (struct book*) malloc(sizeof(struct  book));
add_records(someBook);
print_records(someBook); 

 return 0;
}


void add_records(struct book *b){
fprintf(stderr, "How many items do you want to add\n");
scanf("%d", &n);
b = (struct book*) malloc(n * sizeof(struct book));

for(i = 0; i < n; i++){
fprintf(stderr,"add author\n");
scanf("%s", (b + i)->author);
fprintf(stderr,"add title\n");
scanf("%s",(b+i)->title);
fprintf(stderr,"add Id: \n");
scanf("%d", &(b+i)->id);
}
}

void print_records(struct book *b){
b = (struct book*) malloc(sizeof(struct book));
for(i = 0; i < n;  ++i){
printf("Author: %s\t Title: %s\t Id: %d\n", (b+i)->author,(b+i)->title,(b+i)->id);
}
}

1 个答案:

答案 0 :(得分:0)

您在main中分配了一本书,并将其传递给add_records。然后在add_records中分配另一本书。写进第二本书。从add_book返回(泄漏填好的书),然后回到主要的未经修改的书中。

然后你打电话给print_records,你从那里传来这本书。然后立即创建另一本空书,打印它的详细信息并返回泄漏另一本书)。

你从来没有碰过主要开始的原书......

解决方案:摆脱b = (struct book*) malloc(sizeof(struct book));add_records中的print_records行。