Would be more readable by putting the logic in the body of the loop

 for (size_t i = 0; i < num; i++) {
     len += strlen(va_args(args, const char *));
 }