如果不使用strcpy
复制字符串,程序可以正常工作,但我想知道原因是什么?
#include <stdio.h>
#include <string.h>
int main ()
{
int mat;
char test1[20]={"Hex"} ;
char test2[20]={"agonal"} ;
strcpy(test1,"Diagonal"); // the print outputs the concatenated test if strcpy is commented out
//printf("a=%c\nb=%c\n",test1[0],test1[1]);
printf("Concatenated test=%s", strcat(test1, test2));
return 0;
}
ERROR MESSAGE
*** buffer overflow detected ***: ./prog terminated
======= Backtrace: =========
/lib/libc.so.6(__fortify_fail+0x48)[0xb75b6ae8]
/lib/libc.so.6[0xb75b4b30]
/lib/libc.so.6[0xb75b3dcd]
./prog(__gxx_personality_v0+0x14d)[0x804858d]
./prog(__gxx_personality_v0+0x31)[0x8048471]
======= Memory map: ========
答案 0 :(得分:10)
strcat
来电是失败的。 test1
中没有足够的空间来存储"Diagonal"
和"agonal"
的串联。
如果你使test1
足够大,它应该可以工作:
char test1[40]={"Hex"} ;
答案 1 :(得分:2)
strcat
调用溢出目标缓冲区。
P.S。您刚刚将test1
大小增加到20,现在应该可以正常工作。
答案 2 :(得分:0)
离开此strcpy将导致您将 Hex 与 Diagonal 连接并尝试将其存储在10个元素数组中。 HexDiagonal 的长度为......
答案 3 :(得分:0)
还记得一件事.......当使用strcpy时...然后将源复制到目的地并使用NULL CHARACTER ...这就是为什么目的地应该有足够的记忆......