Ok... creo que voy entendiendo. Con respecto a lo que dices, Sam, uso ahora calloc, y a lo que dices tú, cesar, ya cambié  eso. Sin embargo, declarando texto_num y clave_num como punteros me evita tener que usar p y q, no?
 
Ahora mismo ya he conseguido que compile sin problema alguno, pero me da una violación de segmento. No sé muy bien por qué.    
Código C:
Ver original- #include <stdio.h> 
- #include <string.h> 
- #include <stdlib.h> 
-   
- int *tonumber(char *cadena,  int *cadenafinal) /*Versión con punteros*/ 
- { 
-   char letras[] = "ABCDFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 
-   int numeros[100], i, j; 
-    
-   
-   for(i=0; i<25;i++) numeros[i] = i; 
-   for(i=25; i<50;i++) numeros[i] = (i-25); 
-   
-   for(- i =0;-  i <strlen(- cadena );-  i ++){
 
-      for(- j =0;-  j <strlen(- letras );-  j ++){
 
-          if(cadena[i] == letras[j]) 
-             *(cadenafinal + i) = numeros[j];}} 
-   
-   return cadenafinal; 
- } 
-   
- main() 
- { 
-   char *tmp; 
-   int i, cifrado[100], *texto_num=NULL, *clave_num= NULL; 
-   char texto[100] = "hola foro solo codigo", clave[100] = "clave", claveaux[100] = "\0"; 
-   
-   while((- tmp =strchr(- texto ,' '))!=- NULL ) //Quita los espacios en blanco al texto
 
-   
-   while(strlen(- clave )<strlen(- texto ))   //copia la clave a continuación de la misma mientras
 
-     strcat(- clave ,-  clave );              //que su longitud sea menor que la del texto.
 
-   
-   while((- tmp =strchr(- clave ,' '))!=- NULL ) //Quita los espacios en blanco a la clave
 
-   
-   strncpy(- claveaux ,-  clave , strlen(- texto ));  //Elimina caracteres a la clave hasta que esta sea del
 
-                                             //tamaño del texto. 
-   
-   clave_num = tonumber(claveaux, clave_num); //Convierte los caracteres de clave en valores numéricos 
-   
-   texto_num = tonumber(texto, texto_num);        //Convierte los caracteres de texto en valores numéricos 
-      
-   
-   while(*(texto_num+i) != '\0'){                //Suma al valor ASCII del caracter correspondiente del 
-     cifrado[i] = *(texto_num+i) + *(clave_num+i);  //texto al valor ASCII del caracter de la clave. 
-     i++;} 
-   
-   while(- cifrado [- i ] != '\0'){printf("-%d-",-  cifrado [- i ]);-  i ++;}
 
-   
-   
- }