|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 顶级太阳 于 2022-7-8 16:02 编辑
小甲鱼在s1e19测试题2中提出要求,指出代码里面的问题。并给出了代码如下。答案里指出这个代码会造成字符串连接过程中超出数组定义的空间。很好奇,抄下来运行了一下,同时增加了一个输出数组的语句,结果让我很是吃惊。
- #include<stdio.h>
- #include<string.h>
- int main()
- {
- char str[10];
- strncat(str,"I love FishC.com!",sizeof(str));
- printf("%s\n",str);
- printf("%ld\n",sizeof(str));
- return 0;
- }
复制代码
运行结果如下:
结果中,输出数组结果前面多了一个“@”符号。数组str[10]没有进行初始化,开始考虑是某一个不可预知的初始值,后来考虑是直接连接的,那么程序认为数组里应该是没有数据的,应该是从第一个字符开始填入,也就是str[0],那么应该没有这个字符存在。不同时段,重复开关机测试结果都是这样。而且下一句测试数组长度,输出为10,表示数组大小并没有改变,人工数了连接进去的字符,也是10个。输出11个字符,这个我可以理解,毕竟连接后,结束符在接入的10个字符的后面。那么问题就集中到了最前面的“@”是怎么来的了。求教,最前面的“@”怎么出现的?
补充一下:我用的系统是虚拟机Ubuntu16.4.6系统。是不是和这个有关?主要是小甲鱼的答案里没有提这方面的事。很不明白。 |
|