En la forma que lo haces no llegas a poner a array2 el caracter de termino ('\0') que le indica al programa donde termina array2, es por ello que cuando lo imprimes, imprime hasta donde logra encontrar '\0'. Una posible solución que hallo basado en tu implementación es la siguiente:
Código C++:
Ver original#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()
{
char array[30], array2[30];//array.-arreglo principal //array2.-aki se invertira la cadena
int lng,i,suma=0;//lng=longitud arreglo, i=contador,j=contador
printf("introduce un numero binario: ");
for(i=0;i<lng;i++)
{
array2[i]=array[lng-1-i]
}
array2[lng]='\0';
printf("\n%s\n%s\n",array
,array2
);//imprimo la cadena return 0;
}
Este código sirve si tu arreglo array no sobrepasa de los 30 caracteres.