>>400
スマートかどうかわからんけど、より汎用的なのを作ってみた。
はじめは、[a-x]に24文字あるから、24進数3桁の数字を111から
カウントしていくってコードを思いついたけど、
汎用にしたらオーバーフロー起こしそうな感じだったので
再帰で実装してみた。

#include <stdio.h>
#include <string.h>

void rgenerate(unsigned int digit, const char *seed, char *buf)
{
int i;

if (!digit) {
puts(buf);
return;
}
for(i = 0; i < strlen(seed); ++i) {
buf[digit - 1] = seed[i];
rgenerate(digit - 1, seed, buf);
}
}

int generate(unsigned int digit, const char *seed)
{
char *buf = (char*)malloc(digit + 1);
if (!buf) {
return -1;
}
buf[digit] = '\0';
rgenerate(digit, seed, buf);
free(buf);
}

int main(int argc, char * argv[])
{
generate(3, "abcdefghijklmnopqrstuvwx");
return 0;
}