Alla fine ho applicato la soluzione suggeritami da Nippolo, non penso ci sarei mai arrivato. La posto per completezza:
#define DIM 4
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void stampa(char *);
int main(){
int x;
char vet[DIM] = {'0','1','*','*'}; // 0100 0101 0110 0111 2^2 valori
stampa(vet);
}
void stampa(char v[]){
int cont=0,i,k,j;
int * v2=NULL;
for(i=0; i<DIM; i++ )
if(v[i]=='*')
cont++;
v2 = (int *)malloc(sizeof(int)*cont);
for(i=0; i<cont; i++)
v2[i]=0; //inizializzo vettore v2 a 0
for(i=0,j=0; i<DIM; i++){ //stampo prima sequenza
if(v[i]!='*')
printf("%c",v[i]);
else{
printf("%d",v2[j]);
j++;
}
}
printf(" ");
for(k=1; k<pow(2,cont); k++){
for(i=cont-1; i>=0; i--){ //mi sto perdendo lo 00
if(v2[i]==0){
v2[i]=1;
break;
}
}
if(v2[i]==1 && i<cont-1) //torno a 0 i valori ad esso successivi (se non è l'ultimo)
for(i=i+1; i<=cont-1; i++)
v2[i]=0;
for(i=0,j=0; i<DIM; i++){
if(v[i]!='*')
printf("%c",v[i]);
else{
printf("%d",v2[j]);
j++;
}
}
printf(" ");
}
}