Resumen: mostrar cómo generar cadena aleatoria en C, de cualquier longitud, usando srand.
Vamos a ver cómo obtener un carácter aleatorio de una muestra y agregarlo a la cadena de destino usando ANSI C.
El algoritmo es sencillo. Debemos definir nuestra muestra, es decir, de donde tomaremos los caracteres:
char muestra[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
Ahora debemos hacer un ciclo desde 0 hasta la longitud de la cadena de destino. En cada paso del ciclo:
Como sabemos, las cadenas en C son un poco complejas así que lo haremos en forma de función en donde quien invoca a la función indica el destino y la longitud.
El código queda así:
void cadena_aleatoria(int longitud, char *destino) {
char muestra[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
for (int x = 0; x < longitud; x++) {
int indiceAleatorio = aleatorio_en_rango(0, (int) strlen(muestra) - 1);
destino[x] = muestra[indiceAleatorio];
}
}
Como ves, recibimos la longitud y la cadena de destino, así evitamos cometer errores de cadenas, pues el que invoca a la función debe definirla.
Por cierto, el índice aleatorio es generado en la línea 4 con rand.
El código queda así:
/**
* Generar cadena aleatoria en C
* @date 2019-12-20
* @author parzibyte
* @see https://parzibyte.me/blog
* */#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
// maximo y minimo son inclusivos
int aleatorio_en_rango(int minimo, int maximo) {
return minimo + rand() / (RAND_MAX / (maximo - minimo + 1) + 1);
}
void cadena_aleatoria(int longitud, char *destino) {
char muestra[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
for (int x = 0; x < longitud; x++) {
int indiceAleatorio = aleatorio_en_rango(0, (int) strlen(muestra) - 1);
destino[x] = muestra[indiceAleatorio];
}
}
int main(void) {
#define LONGITUD_DESEADA 50
srand(getpid());
char destino[LONGITUD_DESEADA + 1] = "";// El +1 es por el carácter nulo que marca el fin de la cadena
cadena_aleatoria(LONGITUD_DESEADA, destino);
printf("%s", destino);
}
No olvides que se debe alimentar a srand
, lo que hacemos en la línea 27. Después definimos la cadena de destino cuya longitud debe estar definida en tiempo de ejecución y debe ser constante, para ello usamos #define
.
Finalmente en la línea 29 invocamos a cadena_aleatoria
en donde indicamos la longitud así como el destino, y como no regresa nada (pues modifica internamente a la cadena) no esperamos el resultado, ya que simplemente basta con imprimir destino
.
También puedes explorar más ejercicios sobre C.
Nota importante: este método no sirve para generar contraseñas, no lo uses para cosas de seguridad, ya que no es criptográficamente seguro.
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…
Esta web usa cookies.
Ver comentarios
¿Cómo sería el caso cuando la cantidad de cadenas así como la longitud de ellas es especificada por el usuario?
Si tiene dudas específicas puede enviarme un mensaje en https://parzibyte.me/#contacto
Saludos!