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.
El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…
En este post te voy a enseñar a designar una carpeta para imprimir todos los…
En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…
Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…
Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…
Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…
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!