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
++;}
}