Hola @LecMHD
Si no te entendí mal, es lo siguiente:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#define RANDOM_DEV "/dev/random"
char abc[] = "abcdefghijklmnopqrstuvwxyz";
int
get_random_number()
{
FILE
*stream
= fopen(RANDOM_DEV
, "rb"); if (!stream) {
return -1;
}
unsigned char buff[1];
fread(buff
, sizeof(buff
), sizeof(unsigned char), stream
);
return (int)(buff[0]);
}
void
initialize_abc(char *array, int l)
{
for (int i = 0; i < l; i++)
array[i] = -1;
}
char *
get_random_abc(char *array, int l)
{
for (int i = 0; i < l; i++) {
int rn = get_random_number();
if (rn == -1 && errno != 0)
return NULL;
char c = array[i];
char new_c = abc[rn % (sizeof(abc)-1)];
if (c == new_c) {
i--;
continue;
} else {
array[i] = new_c;
}
}
return array;
}
int
main(void)
{
char array[sizeof(abc)];
initialize_abc(array, sizeof(array));
get_random_abc(array, sizeof(array));
for (int i = 0; i < sizeof(array); i++)
return EXIT_SUCCESS;
}
No es portable, pero creo que da la idea, igualmente lo de "pisar" significa que si la letra está en la posición del arreglo en particular, no es incluya, si no que se genere otra, o al menos, así lo entendí.
~ DtxdF