鱼C论坛

 找回密码
 立即注册
查看: 1316|回复: 2

[已解决]第一张图中 书名编译结果 为什么会出错?求解

[复制链接]
发表于 2023-3-1 20:17:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
第一张图中的book.title与book.auther一起编译后书名输出不正确,而在后面两张图中只编译book.title则输出正确,是怎么回事?是被后面字符占位了吗还是?
最佳答案
2023-3-2 14:45:49
  1. title[3], auther[40] 这两个是连续存放的
  2. title[3] 只有3个字节, 两个汉字4个字节,再加个 \0,共5个字节(假设地址为 0 1 2 3 4),越界了
  3. 再输入auther的时候是会从地址3开始存放
  4. 所以书名输出不对
  5. 把title[3]空间改大就行了
复制代码

1:同时编译① printf("请输入书名: "); scanf("%s",book.title);②printf("请输入作者: " ...

1:同时编译① printf("请输入书名: ");     scanf("%s",book.title);②printf("请输入作者: " ...

2:去掉printf("请输入作者: "); scanf("%s",book.auther);

2:去掉printf("请输入作者: ");     scanf("%s",book.auther);

3:只编译printf("请输入书名: "); scanf("%s",book.title);

3:只编译printf("请输入书名: ");     scanf("%s",book.title);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-1 20:32:05 | 显示全部楼层
title 的三字节空间很可能不够存储两个中文字符,图中现象很可能因此出现
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-2 14:45:49 | 显示全部楼层    本楼为最佳答案   
  1. title[3], auther[40] 这两个是连续存放的
  2. title[3] 只有3个字节, 两个汉字4个字节,再加个 \0,共5个字节(假设地址为 0 1 2 3 4),越界了
  3. 再输入auther的时候是会从地址3开始存放
  4. 所以书名输出不对
  5. 把title[3]空间改大就行了
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 16:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表