代码分析:代码如下:
char s[5] = "phone";//这个空间大小为5 ,字符串隐藏\0,作为字符串的结束标志.
char str2[10], str3[10] ; //定义 str2,str3,两个字符数组,空间大小为10, 默认有隐藏字符\0;
for (int i =0; i< 10; i++) {
str2[i] = 'a'; //将字符'a'遍历10次,保存到str2中,赋值结束,出现溢出现象,\0被溢出,即,没有结束标志.
printf("%c ", str2[i]);
}
strcpy(str3, str2);
printf("str3 = %s\n",str3); //结果aaaaaaaaaaphone
printf("str2 = %s\n",str2); //结果phone
分析如下:
str2 和 str3 出现此结果的情况 :str2内的值赋值为str3,因为str2溢出,,
数组内存开辟空间是从高地址到底地址存储. 即由高到低的存储顺序为 s -> str2 -> str3但给对应字符数组空间赋值,是从低到高,进行赋值,所以,当开始赋值结果如下:
值域,即空间大小 11