|
发表于 2021-2-18 11:01:02
|
显示全部楼层
本楼为最佳答案
本帖最后由 李京 于 2021-2-18 11:13 编辑
溢出了啊
你可以把字符数组理解成指向字符的指针,
str2没有识别到'\0'是不会停止的,
如果你把str1再改长些,就可以看到效果了,
溢出是不会影响本身的,但是可能会影响其他数据
- #include <stdio.h>
- #include <string.h>
- int main(void)
- {
- char str1[]="aksldfjaklsdjfkla";
- char str2[10]="alskdjfkl";
-
- strcpy(str2,str1);
-
-
- printf("str1->%p\n",str1);//打印地址
- printf("str2->%p\n",str2);
- printf("str1:%s\n",str1);//打印内容
- printf("str2:%s\n",str2);
-
- return 0;
- }
复制代码
打印出来的
str1->000000000062FE00
str2->000000000062FDF0
str1:a
str2:aksldfjaklsdjfkla
str1和str2之间相差16个字节,但是str2占了18个字节,所以,str1的内容就被覆盖了
为什么str1会打印a呢,
因为str2最后超出来的是'a'和'\0',
str1的前两个就是a'和'\0',
识别到'\0'之后就不打印了,
你还利用有下标法,str1后面的字符是没有被覆盖的
加一句这个在后面,会打印str1的第四个字符 |
|