Hola! Para el primer post:
1) probe cambiando de 100 a 1000 y no tengo problemas
2) La ñ casi ni se usa, ni penses para eso :P
3) a q te referis con comer los espacios??? Supongamos que encriptas "cesar casla", y como resultado da: "aeiou abcde"; ¿¿lo q vos qres es comer espacios asi: "aeiouabcde" ???
El tema es como despues sabes cuando va un espacio para desencriptar??
Para el segundo post: no entiendo muy bien q es lo hacer, pero te marco los errores para funcion tonumber():
1º
sino me equivoco estas retornando un int no un int*. Tendria que ser sin el * (raro q no te de aunq sea un warning)
2º Otro error es que cadenafinal es un arreglo declarado en la funcion, y cuando retornes al main cadenafinal ya no existe
3º Por lo q veo al arreglo "q" le queres asignar cadenafinal(q=cadenafinal) recorda que los arreglos tenes q copiar dato x dato
Para resolverlo: en el main "q" debe ser un int *, luego en la funcion creas un arreglo dinamico(con malloc) y retornas eso
Saludos