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""agonal"

あなたがtest1十分に大きくするならば、それはうまくいくはずです:

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

呼び出しはstrcat宛先バッファをオーバーフローします。

test1PSサイズを20に増やしたところ、動作するはずです。

于 2012-08-28T12:48:07.300 に答える
0

もう1つ覚えておいてください.... strcpy を使用すると...ソースがNULL CHARACTERで宛先にコピーされます...そのため、宛先には十分なメモリが必要です...

于 2012-08-28T17:58:48.220 に答える
0

この strcpy をそのままにしておくと、 HexDiagonalを連結し、10 要素の配列内に格納しようとします。HexDiagonalの長さは...

于 2012-08-28T12:49:35.333 に答える