C++ execv неизвестное преобразование const char *[6] и char *const *

Я пытаюсь вызвать execv() с некоторыми аргументами, imagePath и outputPath являются std::string, поэтому я преобразовал их в строки C, а затем также преобразовал целые числа в строки C.

Ошибка, которую я получаю,

function not viable: no known conversion from 'const char *[6]' to 'char *const *' for 2nd argument
int      execv(const char * __path, char * const * __argv) __WATCHOS_PROHIBITED __TVOS_PROHIBITED;

В чем разница между const char *[] и char *const *?

void Utility::ExecCrop()
{
    // convert numbers to strings
    const char* x_char = std::to_string(job.x).c_str();
    const char* y_char = std::to_string(job.y).c_str();
    const char* w_char = std::to_string(job.w).c_str();
    const char* h_char = std::to_string(job.h).c_str();
    
    const char* arguments[] = { imagePath.c_str(), outputPath.c_str(), x_char, y_char, w_char, h_char };

    execv(execPath.c_str(), arguments);
}

person Adam Jean-Laurent    schedule 31.10.2020    source источник
comment
Как примечание: список arguments должен заканчиваться указателем NULL (или nullptr в C++). Дополнительную информацию см. в документации по функции execv.   -  person Andreas Wenzel    schedule 01.11.2020
comment
Еще одно примечание: как долго временные значения выходят из С++? Разве временный std::string, возвращаемый std::to_string, не испарится после вызова .c_str и не заберет с собой буфер? Лучше привязать строку к переменной: std::string s = std::to_string(foo); const char *cs = s.c_str();   -  person HAL9000    schedule 01.11.2020
comment
Дополнительные примечания: по соглашению первым аргументом исполняемого файла должно быть имя исполняемого файла.   -  person HAL9000    schedule 01.11.2020