strcpyを使うのが悪いんじゃなくて、strcpyを作ったやつが悪いんじゃね?
char a[5];
strcpy(a,"abcdefghijk");
これでメモリがぶっ壊れるように作るほうが悪い。
a[i] == '\0'になったら処理を終えればいいんだよ。