Code:
void print_columns (size_t numw, char **c1, char **c2, char **c3)
{
while (numw--) {
if (c1 && **c1) {
printf("| %10s |", *(c1++));
} else {
printf("| |");
}
if (c2 && **c2) {
printf("| %10s |", *(c2++));
} else {
printf("| |");
}
if (c3 && **c3) {
printf("| %10s |", *(c3++));
} else {
printf("| |");
}
printf("\n");
}
}
char ** alloc_permutation_array (size_t lenw, size_t numw)
{
int i;
char **res;
res = calloc(sizeof(char *), numw);
for (i = 0; i < numw; i++)
res[i] = calloc(1, lenw);
return res;
}
void free_permutation_array (size_t numw, char **data)
{
int i;
for (i = 0; i < numw; i++)
free(data[i]);
free(data);
}
int main (void)
{
char **r1 = alloc_permutation_array(3, 50);
char **r2 = alloc_permutation_array(4, 100);
char **r3 = alloc_permutation_array(4, 100);
int len;
len = permutation (r1, "abc", 1, 3);
printf("len=1-3 chrset=3 | %d perm.\n", len);
len = permutation (r2, "abc", 3, 3);
printf("len=3-3 chrset=3 | %d perm.\n", len);
len = permutation (r3, "a", 1, 9);
printf("len=1-9 chrset=1 | %d perm.\n", len);
print_columns(100, r1, r2, r3);
free_permutation_array(50, r1);
free_permutation_array(100, r2);
free_permutation_array(100, r3);
}
Testing framework that I was using earlier