title: How to dynamically expand a string in C
body: <p>I have a function that recursively makes some calculations on a set of numbers. I want to also pretty-print the calculation in each recursion call by passing the string from the previous calculation and concatenating it with the current operation. A sample output might look like this:</p>
  
  <pre><code>3
  (3) + 2
  ((3) + 2) / 4
  (((3) + 2) / 4) x 5
  ((((3) + 2) / 4) x 5) + 14
  ... and so on
  </code></pre>
  
  <p>So basically, the second call gets 3 and appends + 2 to it, the third call gets passed (3) + 2 , etc. My recursive function prototype looks like this:</p>
  
  <pre><code>void calc_rec(int input[], int length, char * previous_string);
  </code></pre>
  
  <p>I wrote a 2 helper functions to help me with the operation, but they implode when I test them:</p>
  
  <pre><code>/**********************************************************************
   * dynamically allocate and append new string to old string and return a pointer to it
   **********************************************************************/
   char * strapp(char * old, char * new)
   {
       // find the size of the string to allocate
       int len = sizeof(char) * (strlen(old) + strlen(new));
  
       // allocate a pointer to the new string
       char * out = (char*)malloc(len);
  
       // concat both strings and return
       sprintf(out, "%s%s", old, new);
  
       return out;
   }
  
  /**********************************************************************
   * returns a pretty math representation of the calculation op
   **********************************************************************/
   char * mathop(char * old, char operand, int num)
   {
       char * output, *newout;
       char fstr[50]; // random guess.. couldn't think of a better way.
       sprintf(fstr, " %c %d", operand, num);
       output = strapp(old, fstr);
       newout = (char*)malloc( 2*sizeof(char)+sizeof(output) );
       sprintf(newout, "(%s)", output);
       free(output);
       return newout;  
   }
  
  
  void test_mathop()
  {
      int i, total = 10;
      char * first = "3";
      printf("in test_mathop\n");
      while (i &lt; total)
      {
          first = mathop(first, "+", i);
          printf("%s\n", first);
          ++i;
      }
  }
  </code></pre>
  
  <p>strapp() returns a pointer to newly appended strings (works), and mathop() is supposed to take the old calculation string ("(3)+2"), a char operand ('+', '-', etc) and an int, and return a pointer to the new string, for example "((3)+2)/3". Any idea where I'm messing things up? thanks.</p>