问题出在第18行,你需要给字符数组分配足够的空间来存储输入的字符串。当前的定义是`char title`,这只能存储一个字符,应该修改为`char title[50]`,这样就可以存储最多50个字符的字符串了。同样,也需要修改`char author`和`char publisher`的定义。
另外,第25行的错误是因为传递给`getInput`函数的参数`book`为空指针。你可以通过将`struct Book book;`改为`struct Book *book = malloc(sizeof(struct Book));`来动态分配内存,并确保在使用完之后使用`free(book);`来释放内存。
修改后的代码如下:#include <stdio.h>#include <stdlib.h>struct Date { int year; int month; int day;};struct Book{ char title[50]; char author[50]; float price; struct Date date; char publisher[50];};struct Book *getInput(struct Book *book);void printBook(struct Book *book);struct Book *getInput(struct Book *book){ printf("请输入书名:"); scanf("%s", book->title); printf("请输入作者:"); scanf("%s", book->author); printf("请输入售价:"); scanf("%f", &book->price); printf("请输入出版日期:"); scanf("%d-%d-%d", &book->date.year, &book->date.month, &book->date.day); printf("请输入出版商:"); scanf("%s", book->publisher); return book;}void printBook(struct Book *book){ printf("\n\n======开始打印书籍信息======\n\n"); printf("书名:%s\n", book->title); printf("作者:%s\n", book->author); printf("售价:%.2f\n", book->price); printf("日期:%4d-%2d-%0.2d\n", book->date.year, book->date.month, book->date.day); printf("出版社:%s\n", book->publisher);}int main(void){ struct Book *book = malloc(sizeof(struct Book)); struct Book *my_book = getInput(book); printBook(my_book); free(book); return 0;}
这样修改后,你应该可以正常运行程序并且不会报错了。记得在使用完动态分配的内存后,要及时使用`free`函数释放内存。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |