Bueno, sin mas, un codigo como el anterior pero un poco mas complejo

.
Metodo de uso
dic [longitud del diccionario] (opcional)[caracteres del diccionario]
Si no se especifica el 2º parametro, se utilizaran los que vienen por defecto osea, "abcdefghijklmnopqrstuvwxyz".
Sin mas explicacion, el codigo.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{ if(argc
< 2 || !strcmp(argv
[1], "-h")) //Texto de ayuda
{
puts("HELP: \nsintax: dic [len_dic] (optional)[list]");
return 1;
}
int len
=0, cont
=atoi(argv
[1]), *cad
, i
, ver
=1; //Declaracion
cad
=(int *)malloc(sizeof(int) * atoi(argv
[1])); //Reserva de memoria para un array int
memset((int *)cad
,0,sizeof(int) * atoi(argv
[1]));//Inicializamos el array a 0
char *lst;//Declaracion de la lista que contendra las posibilidades
if(argc < 3) //Comprobamos el numero de parametros introducidos para hacer una cosa u otra
{
strcpy(lst
, "abcdefghijklmnopqrstuvwxyz");
}
else if(argc == 3)
{
if(!lst)
{
puts("No se pudo reservar la memoria");
return 1;
}
}
while(len+1<=cont)//Comienza el ciclo de generacion
{
if(lst[cad[0]]!='\0')
{
for(i=0;i<=len;i++)
{
}
}
if(lst[cad[0]]!='\0')
{
cad[0]++;
}
else
{
ver=0;
for(i=0;i<=len;i++)
{
if(lst[cad[i]]=='\0')
{
cad[i]=0;
cad[i+1]++;
}
else
{
ver=1;
}
}
}
if(ver==0)
{
len++;
for(i=0;i<=len;i++)
{
cad[i]=0;
}
ver=1;
}
}
return 0;
}
Sa1uDoS
P.D.: Mejorado para Luxur, el SO de Taul.