Я пытаюсь вызвать 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);
}
arguments
должен заканчиваться указателемNULL
(илиnullptr
в C++). Дополнительную информацию см. в документации по функцииexecv
. - person Andreas Wenzel   schedule 01.11.2020std::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