鱼C论坛

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

[已解决]c语言字符数组遍历问题

[复制链接]
发表于 2020-2-2 09:36:32 | 显示全部楼层 |阅读模式

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

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

x
用字符数组表达字符串“java”,那数组长度应该是5吧。请问一下为什么这样遍历不会报错?


char str1[] = "java";

for (ii = 0; ii < 6; ii++)
                printf("1B) str1[%d]='%c' (%d)\n", ii, str1[ii], str1[ii]);
        printf("\n");
最佳答案
2020-2-2 11:20:37
本帖最后由 SHRS23 于 2020-2-2 11:24 编辑

如果把循环次数再改大一点,你还能看到输出了一些奇怪的东西,那是存在字符串后面那一块内存里的内容。

不报错的原因是C语言不进行边界检查,越界访问会被视为普通的指针内存访问,如果那块内存是可读的,编译器不报异常。

建议参考:
https://www.zhihu.com/question/23440081
或者以 “C语言 数组索引越界” 为关键字自行查找资料
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-2 11:18:57 From FishC Mobile | 显示全部楼层
有的编译器应该不允许
这样也不安全
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-2 11:20:37 | 显示全部楼层    本楼为最佳答案   
本帖最后由 SHRS23 于 2020-2-2 11:24 编辑

如果把循环次数再改大一点,你还能看到输出了一些奇怪的东西,那是存在字符串后面那一块内存里的内容。

不报错的原因是C语言不进行边界检查,越界访问会被视为普通的指针内存访问,如果那块内存是可读的,编译器不报异常。

建议参考:
https://www.zhihu.com/question/23440081
或者以 “C语言 数组索引越界” 为关键字自行查找资料
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 05:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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