簡體   English   中英

為什么strcpy會觸發錯誤?

[英]Why does strcpy trigger an error?

如果沒有使用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: ========

strcat調用失敗了。 test1沒有足夠的空間來存儲"Diagonal""agonal"的串聯。

如果你使test1足夠大,它應該工作:

char test1[40]={"Hex"} ;

strcat調用溢出目標緩沖區。

PS你剛剛將test1大小增加到20,現在應該可以了。

離開這個strcpy將導致你將HexDiagonal連接並嘗試將其存儲在10個元素數組中。 HexDiagonal的長度是......

還記得一件事.......當使用strcpy時...然后它使用NULL CHARACTER將sourse復制到目的地 ...這就是為什么目的地應該有足夠的內存......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM