Programa en c
Buenas Krall,
Has optado por crear una funcion para calcular la aleatoriedad, con dos variables, una de tipo char direccionada a un puntero (*S) y otra de tipo const int llamada len (supongo que hace referencia a la longitud del string). Despues declaras el array con todos los caracteres que se emplearan para realizar combinaciones. Pero a mi juicio el array lo declaras de una manera un poco extraña, empleando "static const char", nunca había visto esa declaración para una cadena de caracteres. ¿A que hace referencia el "static const", (¿ constante?) es imprescindible declarar el array empleando esa nomenclatura?
Luego empleas el for teniendo como índice int i, mientras que i sea menor que length-len (longitud del string) , el bucle se reitera una y otra vez e i++. ok y por último declaras la operación para calcular las combinaciones aleatorias,
s[i] = alphanum[rand() % (sizeof(alphanum) - 1)];
sizeof sirve para calcular la longitud del string, en este caso denominado alphanum, y le restas 1 porque el tipo de declaración con encomillado doble " ", hace que tanga por defecto el caracter "\0" de fin de cadena. Así , aludiendo que la cadena de caracteres prevamente declarada tiene un total 52 elementos ((27*2)-2 la ñ no se incluye, Mayusc y minusculas) esteableces el numero aleatorio con la funcion rand(), que seria rand()%51. De esta forma la variable puntero tipo char S almacena los elementos de cero a 51 del array. Empleas el índice i para asignar el valor a las respectivas posiciones de los elementos,
Así Sî[ i ], si i =3 y el rand de 0 a 51 resulta que es 2 se tiene que S[3]=C; y asi consigues las combinaciones.
lo que no me queda claro es porque empleas S[len]=0; , una vez que el i iguala a len el bucle finaliza no?
Bien declaro la función main y revoco la función que has hecho tu, así:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int gen_random(char *s, const int len)
{
static const char alphanum[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
for (int i = 0; i < len; i++) {
s[i] = alphanum[rand()%(sizeof(alphanum) - 1)];
return s[i];
}
}
int main()
{
char string;
int len;
char *z; /variable puntero para almacenar los datos de la revocacion de la funcion
len=3;
*z=&gen_random(string, len); /se almacena s[i] de la función en *z
printf("%s", *z); /%s cadena de caracteres contenida en *z tras la
revocacion de la función
return 0;
}
He cambiado la funcion void gen_ rand por el tipo int, para devolver valor y posibilitar la revocación de la función. Estos son los errores que da el código:
gcc -Wall -o "programa string lafanumerico" "programa string lafanumerico.c" -lncurses (en el directorio: /home/eduardo/Documentos/Programación/C++ programs)
programa string lafanumerico.c: In function ‘main’:
programa string lafanumerico.c:46:18: warning: passing argument 1 of ‘gen_random’ makes pointer from integer without a cast [-Wint-conversion]
*z=&gen_random(string, len);
^
programa string lafanumerico.c:28:5: note: expected ‘char *’ but argument is of type ‘char’
int gen_random(char *s, const int len)
^
programa string lafanumerico.c:46:6: error: lvalue required as unary ‘&’ operand
*z=&gen_random(string, len);
^
programa string lafanumerico.c:48:10: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
printf("%s", *z);
^
programa string lafanumerico.c: In function ‘gen_random’:
programa string lafanumerico.c:36:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
Ha fallado la compilación.
Comentame, no estoy familiarizado con el uso de los punteros para leer y almacenar contenidos de otras variables. La sintaxis es errónea. Coméntame
Muchas gracias y saludos,
Reno 92
PD: s[ i ] s[ i ] = alphanum[rand()%(sizeof(alphanum) - 1)]; s [ i ] , no se porque desaparecen los corchetes y la i