当前位置: 技术问答>linux和unix
Linux和HP-UX下的strcat的内存越界问题
来源: 互联网 发布时间:2016-05-03
本文导语: 下面的c代码,在Redhat As 4(gcc 3.4.2)下的测试,结果如注释。 char filename[10]="123456"; char a[2]; .... strcpy(a,"-"); // strcat(a,"9") //此处strcat越界,a变量的换行符写在了filename变量的开头处。filename变成了“23456"; 但在HP-UX...
下面的c代码,在Redhat As 4(gcc 3.4.2)下的测试,结果如注释。
char filename[10]="123456";
char a[2];
....
strcpy(a,"-"); //
strcat(a,"9") //此处strcat越界,a变量的换行符写在了filename变量的开头处。filename变成了“23456";
但在HP-UX 11V2上,测试结果却是正确的,strcat操作后,a的值为“-9”,filename没有受到影响,还是"123456"。
请问这是怎么回事?
char filename[10]="123456";
char a[2];
....
strcpy(a,"-"); //
strcat(a,"9") //此处strcat越界,a变量的换行符写在了filename变量的开头处。filename变成了“23456";
但在HP-UX 11V2上,测试结果却是正确的,strcat操作后,a的值为“-9”,filename没有受到影响,还是"123456"。
请问这是怎么回事?
|
应该跟栈/内存的管理方式有关系,如果a后面的内存恰好没人用到,并且内容又都为""那么即使越界了也不会有问题。