|  | 
 
| 
本帖最后由 顶级太阳 于 2022-7-8 16:02 编辑
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  
 小甲鱼在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系统。是不是和这个有关?主要是小甲鱼的答案里没有提这方面的事。很不明白。
 | 
 |