I often use the execv() function in C++, but if some of the arguments are in C++ strings, it annoys me that I cannot do this:
const char *args[4]
const is a C++ thing - execv has taken char * arguments since before C++ existed.
You can use const_cast instead of copying, because execv doesn't actually modify its arguments. You might consider writing a wrapper to save yourself the typing.
Actually, a bigger problem with your code is that you declared an array of characters instead of an array of strings.
Try: const char* args[4];