RE:como concatenar a un string un char?
Tu problema radica en que el string
char *cadena = NULL; no cuenta con memoria asignada, ya que al inicializarlo con "NULL", lo que logaste fue un puntero a un string vació.
Luego le asignas otro puntero
cadena = "12345678";
si intentas agregarle un byte a "cadena" estarás sobre-escribiendo memoria no asignada a tu variable.
Una opción de resolverlo es definiendo cadena con un tamaño determinado:
char cadena[10]; En este caso podras agregar hasta 9 bytes y el último correponderá al NULL final.
strcpy( cadena, "123456789" );
La función strcpy se encarga de agregar el NULL en el byte 10 de tu string.
Si no quieres fijar de antemano el tamaño de tu string, deberás utilizar asignación de memoria
char *cadena=NULL;
int nMaxBytes = 100;
cadena = (char *)malloc( nMaxBytes );
/* Utilizar cadena */
strcpy( cadena, "123456789...." ); /* hasta nMaxBytes-1 */
/* al finalizar liberar la memoria asignada */
free( cadena );
De esta forma podrás determinar durante la ejecución del programa la capacidad de tu string.