I'm working with grap. My graph is a structure like this
typedef struct{
  int order; // number of node
  int **mat; // matrix graphe
}graphe;
I'm working on school project and I need to build a set of binary's number from 0 to N (where is the order of the graph)
Actually I did this, it's working. When I'm printing the final variable, it displays all declinaison of binary number (000, 001, 010, 011, etc...)
char** construireSousEnsemble(graphe g){
  int size = pow(2, g.order);
  char** D = (char**)malloc(sizeof(char*)*g.order-1);
  for (int i = 0; i < size; i++){
    D[i] = (char*)malloc(g.order-1);
    char buffer[g.order-1];
    char tmp[g.order-1];
    char final[g.order-1];
    for (int j = g.order-1; j >= 0; j--){
      int bin = (i >> j)&1;
      sprintf(buffer, "%d", bin);
      snprintf(tmp, sizeof(tmp), "%s", buffer);
      strcat(final, tmp);
      if (j == 0){
        strcpy(D[i], final);
        //printf("%s\n", D[i]);
        //printf("%d | %s\n", i, D[i]);
        memset(final, 0, sizeof(final)); // reset the zone
      }
    }
    //printf("\n");
  }
  return D;
}
But in the main function, when I'm calling the function like this:
char** zones = construireSousEnsemble(g);
But when I'm printing the content with zones, I have this:

So I'm a bit lost. This example is for a 3 nodes graph. If I have a 4 nodes, the weird symbol increase and I won't have 0001 or 0010 etc.., same with 5 or 6 nodes.
So my question is, why is this happening?
By the way, I'm not confortable with C so maybe I made some mistakes.
Thank you all :)
