You need to enable JavaScript to run this app. Turbo C++运行图书信息录入程序输入书名作者后异常终止是什么原因
优惠活动
大模型
产品
解决方案
定价
更多

Turbo C++运行图书信息录入程序输入书名作者后异常终止是什么原因

代码问题说明及修复方案

程序异常终止的核心原因是内存越界写入,具体问题点如下:

  • 字段类型定义错误
    你在结构体中将title(书名)和author(作者)定义为char类型,该类型仅能存储1个字节的单个字符,完全不足以容纳多字符组成的字符串。当调用scanf("%s")输入内容时,写入的数据会超出字段分配的内存空间,破坏程序栈结构,直接触发异常终止。
    修复方式:将两个字段调整为足够长度的字符数组,示例如下:
struct books {
    int id;
    char title[100]; // 可存储最长99字符的书名
    char author[50]; // 可存储最长49字符的作者名
    int year;
    long isbn;
};
  • 字符串输入参数错误
    字符数组名本身就是指向数组首地址的指针,使用scanf输入字符串时不需要额外添加取地址符&,原代码scanf("%s",&b.title);的写法不符合语法要求。
    修复方式:去掉取地址符即可:
printf("\n Enter BOOK TITLE: ");
scanf("%s", b.title);
printf("\n Name of AUTHOR: ");
scanf("%s", b.author);
  • ISBN类型与格式符不匹配
    isbn字段定义为long类型,但原代码使用适配int类型的%d格式符做输入输出,两者内存长度不一致,会导致数据读写错误。
    修复方式:将ISBN相关的格式符替换为%ld:
// 输入部分
printf("\n Enter ISBN: ");
scanf("%ld", &b.isbn);
// 输出部分
printf("\n ISBN: %ld \n ", b.isbn);

额外提示:如果需要输入包含空格的书名/作者,可将scanf("%s")替换为gets(),或使用%[^\n]格式符读取整行内容,注意提前清空输入缓冲区残留的换行符避免读取空内容。

内容的提问来源于stack exchange,提问作者Shrija Chaurasia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 08:54:01