菌菌菌 发表于 2020-2-2 09:36:32

c语言字符数组遍历问题

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


char str1[] = "java";

for (ii = 0; ii < 6; ii++)
                printf("1B) str1[%d]='%c' (%d)\n", ii, str1, str1);
        printf("\n");

wp231957 发表于 2020-2-2 11:18:57

有的编译器应该不允许
这样也不安全

SHRS23 发表于 2020-2-2 11:20:37

本帖最后由 SHRS23 于 2020-2-2 11:24 编辑

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

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

建议参考:
https://www.zhihu.com/question/23440081
或者以 “C语言 数组索引越界” 为关键字自行查找资料
页: [1]
查看完整版本: c语言字符数组遍历问题