|
发表于 2023-12-25 22:21:36
|
显示全部楼层
问题出在第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 小助理,如未能正确解答您的问题,请继续追问。 |
|