2

如果不使用复制字符串,程序可以正常工作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: ========
4

4 回答 4

10

strcat电话是失败的。您没有足够的空间test1来存储"Diagonal"and的连接"agonal"

如果你做得test1足够大,它应该可以工作:

char test1[40]={"Hex"} ;
于 2012-08-28T12:47:07.347 回答
2

strcat调用溢出目标缓冲区。

PS您刚刚将test1大小增加到20,现在应该可以了。

于 2012-08-28T12:48:07.300 回答
0

离开这个 strcpy 将导致您将HexDiagonal连接并尝试将其存储在 10 个元素的数组中。HexDiagonal的长度是...

于 2012-08-28T12:49:35.333 回答
0

还记得一件事……当使用 strcpy 时……然后它用 NULL CHARACTER 将源复制目标……这就是为什么目标应该有足够的内存……

于 2012-08-28T17:58:48.220 回答