¿Cómo funcionan las cadenas y matrices de caracteres en C?

No he visto guías que parezcan explicar esto muy bien.

Quiero decir, puedes asignar memoria para unchar*, o escribechar[25] ¿en lugar? ¿Cual es la diferencia? Y luego están los literales, que no pueden ser manipulados? ¿Qué sucede si desea asignar una cadena fija a una variable? Me gusta,stringVariable = "thisIsALiteral", entonces como lo manipulas despues?

¿Alguien puede establecer el récord aquí? Y en el último caso, con el literal, ¿cómo se hace cargo de la terminación nula? Encuentro esto muy confuso.

EDITAR: El problema real parece ser que, como lo entiendo, tienes que hacer malabarismos con estas diferentes construcciones para lograr incluso cosas simples. Por ejemplo, solochar * se puede pasar como argumento o valor de retorno, pero solochar[] Se le puede asignar un literal y modificarlo. Siento que es obvio que con frecuencia / siempre necesitamos poder hacer ambas cosas, y ahí es donde está mi escollo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta