gracias eferion por tu respuesta, le haré esos cambios a mi código. Una última pregunta, si tengo declarada un puntero como *cadena y después le asigno memoria así:
codigo_datos = (char*)malloc(33*sizeof(char));
es correcto después de hacer esto inicializarla con NULL??
codigo_datos = (char*)malloc(33*sizeof(char));
es correcto después de hacer esto inicializarla con NULL??