关于 char * 指针数组的问题
程序代码:
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char *arr = (char *)malloc(sizeof(char) * 2); for(int i = 0; i < 10; i++) { arr[i] = 65 + i; } printf("%s", arr); }
问题是在写堆串的时候突然发现的,之前从来没注意过,也没有特意去越界
第一句明明只是赋予了 char *arr 2 个空间
然而实际插入了不止是 2 个,而是 10 个,但是居然能够成功输出 ABCDEFGHIJ
把 char 换成了 int, 也可以成功输出
这样做明显占用了本不应该是自己的空间,但是为什么没有报出数组越界的错误,而是可以成功通过编译
另外,实际编程中,是否支持这样去做?也就是说本来应该 int *a = new int[10],实际上只需要 int *a = new int 就可以了(申请空间用 C++ 的 new 暂时代替)
之后我在想是否可以通过 char ** 不限制空间去模拟一个简单 vim,但是 char ** 的第一个指针如果越界是会报错的
有没有大神解释一下原理