No vuelvas a escribir si nadie te responde por favor.
La diferencia es la misma que entre cualquier variable con o sin
const.
ltoa,
strcat y
casting.
p es un array de tamaño fijo, no podes asignarle una cadena diferente (ahi lo marca en el error).
C++ no es PHP, te recomiendo un libro (casi cualquiera) de C++ ya que todas estas dudas son muy elementales.
Una manera no muy segura (averigua sobre sprintf) por el tamaño de los buffers:
Código:
char a[5] = "hola", c[10];
int b = 10;
sprintf(c, "%s%d", a, b);