c语言的字符串数组初始化问题

2020-09-09 科技 87阅读
字符串至少要有一个结束符
%s的打印,是以结束符为标志的
两点要理解
1、字符串和字符数组是不一样的两个东西
虽然都是这么定义,但是字符串需要\0这个结束符,字符数组不需要
2、变量的内存模型
程序运行时,要申请内存来保存变量的数据,并且是紧挨着的,具体顺序我忘记了,有的编译器可能不同
按你的程序,str1在前,str2在后,并且是紧挨着的,str1 5个内存空间,紧挨着str2 4个空间,后面可能还要空间没有使用
你输入abcde后,占用6个空间,吧str2的一个空间占用了,这里是不检查越界的
接着输入abcd,把str1的结束符覆盖掉,并且也是越界,因为str2是4个字符空间,结束符要占一个,是5个空间,把内存中str2后面的一个内存写入结束符,如果后面还有变量的话,程序会出错
这样打印%s时,str1检查结束符是str2后面的结束符,所以是abcdeagcd,str2是abcd
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com