为什么strcpy会触发错误?

Bor*_*ito 2 c

如果没有使用复制字符串,该程序工作正常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: ========
Run Code Online (Sandbox Code Playgroud)

Pab*_*ruz 10

strcat调用是一个失败.你没有空间足够test1存放的串联"Diagonal""agonal".

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

char test1[40]={"Hex"} ;
Run Code Online (Sandbox Code Playgroud)