Проблема с переносом массива int в argv[] для функции execv
Нужно передать массив переменной длины как аргумент вызываемой программы. Для этого использую функцию execv, т.к. там как раз аргументы передаются как массив указателей. Массив указателей формирую следующим образом:
char** argv = (char**)malloc(sizeof(char*)*(size+2));//size - размер int массива
argv[0] = "prog";
char buf [3];
for ( int j = 1; j < size+1; j++)
{
sprintf(buf, "%d", array[(first + j - 1)]);//first - смещение в исходном int массиве
argv[j] = buf;
}
argv[size+1] = NULL;
execv("prog", argv);
Проблема заключается в том, что в массив argv на место всех элементов числового массива записывается последний элемент этого массива, то есть: был числовой массив 1 4 3 5 7 6, а вызываемая программа получила массив 6 6 6 6 6 6. Вызываемая программа точно работает правильно, проблема именно в передаче в argv
Ответы (1 шт):
Ну сами подумайте!
sprintf(buf, "%d", array[(first + j - 1)]);
argv[j] = buf;
Все ваши argv хранят один и тот же адрес - buf! Который вы каждый раз перезаписываете.
Воспользуйтесь массивом типа
char buf[количество аргументов][максимальная длина];
Ну, или динамически размещаемым - типа
argv[j] = malloc(...)
sprintf(argv[j]...
Кстати, у вас же C++ - так почему malloc, а не new&?...