C语言字符数组踩坑
如果运行下面的代码会发生输出什么?
#include<stdio.h>
#include<string.h>
/**
* 输出结果
* a1:wohello
* a2:hello
*/
int main()
{
char a1[2]="world";
char a2[5]="hello";
printf("a1:%s\n",a1);
printf("a2:%s\n",a2);
return 0;
}
在C语言中,给了程序员很大的管理内存的权力,与此同时,也意味着编译器不会帮你校验给数组赋的值是否超出了数组本身的空间。如果有两个数组定义的地方是相邻的,他们在内存中的空间也是相邻的,因此当的数组的值越界时,会影响相邻的数组。