There really should be an else clause that lets the user know about truncation - which is probably just cause to abort !
Also, if you're never going to make configuration->arguments any other size than 32, how about declaring it in the struct as an array of size 32 and saving all the separate heap traffic for it ?
I'd sooner see flexible handling of the array, though.  When parse() sees the -i and records the initial command, it can perfectly sensibly tell ConfigurationSetCommand() the number of arguments it'll be passing in, argc - (i+1), so that we allocate the correct-sized array in the first place.  It could even just call ConfigurationSetCommand(argv+i+1, argc -i -1); which could then just copy the whole of the remaining array and be done.