Aleatorizar una cadena en C

Estoy intentando generar permutaciones aleatorias de una cadena fija de 80 caracteres en C. Para mi consternación, el sistema en el que estoy trabajando carece de strfry (). ¿Cuál es la mejor manera de generar una permutación aleatoria de esta cadena? Dado que esto será en bucle durante aprox. 100.000 veces, el rendimiento es un problema.

Solo use la implementación de Open Source GLIBC, tal como lo encuentra Google Code .

char * strfry (char *string) { static int init; static struct random_data rdata; size_t len, i; if (!init) { static int state[8] = { 1, 2, 3, 4, 5, 6, 7, 8 }; rdata.state = NULL; __initstate_r (time ((time_t *) NULL), state, 8, &rdata); init = 1; } len = strlen (string); for (i = 0; i < len; ++i) { int32_t j; char c; __random_r (&rdata, &j); j %= len; c = string[i]; string[i] = string[j]; string[j] = c; } return string; } 

Es posible que desee cambiar los tipos de datos específicos de GLIBC a algo más genérico.

Este código utiliza el shuffle de Fisher-Yates, que en realidad es bastante fácil de implementar y muy eficiente.

cree una matriz de 80 líneas, ponga un carácter y un número aleatorio en cada línea de la matriz, luego ordene la matriz en los números aleatorios.

Reconstruir cadena de la matriz ordenada.

void gcry_randomize (unsigned char * buffer, size_t length, enum gcry_random_level level)

Rellene el búfer con bytes aleatorios de longitud utilizando una calidad aleatoria como se define por nivel.

http://www.g10code.com/p-libgcrypt.html