int i = str1;
strcat(str, (char*)&i);

strの要素数が十分ではじめに0クリアされていてsizeof(int)>sizeof(char)ならできる。
「できる」と「やっていい」は別。
これがなぜ「できる」のか分からないのなら、やるべきではない。
っていうか、やるべではない。

なぜstrcatに目をつけたかがそもそも謎。