Serial.print show garbage when used several times

That's not the fault of Serial.println() but of your programming.

You're returning a local variable (bin) to the main routine in intToBin(). Once the program leaves intToBin() that pointer is becoming invalid. It might still contain the content it had in the routine but some of it might already be reused. That's what you see when you print it.