鱼C论坛

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

[技术交流] C语言数组与gets puts问题

[复制链接]
发表于 2020-7-22 21:02:44 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 kukude_xiaoliu 于 2020-7-22 21:07 编辑

如图,为什么数组长度不够装,但是还能够输出呢?
  1. #include<stdio.h>
  2. #include<stdbool.h>
  3. int main()
  4. {
  5.         char old_char[5];
  6.         printf("请输入要转换的字母:");
  7.         gets(old_char);
  8.         puts(old_char);
  9. }
复制代码

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-22 21:45:08 | 显示全部楼层
1. 数组越界
2. 'n' 后面的内存单元中保存的数据正好是 0

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-22 21:53:28 | 显示全部楼层
这属于C语言的缺陷了,对于越界数组没有效的防范方案,在标准中数组越界行为也是未定义的。
理论上越界会使得程序崩溃,属于一个潜在的风险;
(因为会让后续的内存数据紊乱,你可以就这个程序或把这里的代码插入其他程序;写入很长的数据进行测试,会测试到发生崩溃的)
建议用return 0;作判断标准
/************************************************************************************/
gets(char* Str);//将stdin的输入读取的字符放到Str所在的地址单元,以回车或EOF作为终止读取标志并将终止标志转'\0'。只要不按下回车,可无限读取
puts(const char* Str);//将Str所在的地址上的字符串输出到屏幕,直到遇到'\0'。并将'字符串末尾的\0'换成换行符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 13:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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