Одной из возможных причин сбоя execvp
может быть:
strcat(s2, s1);
[ Надеюсь, вы убедились, что s2
достаточно большой, чтобы содержать объединенную результирующую строку, в противном случае переполнение буфера, что является другой, но, безусловно, проблемой в вашем коде. ]
Здесь вы объединяете от s1
до s2
, а s2
- это имя программы, которую вы хотите выполнить. В цикле while
вы делаете:
char* arg[] = {s2, s1, NULL};
arg[0]
указывает на s2
(объединенная строка), и вы передаете это в качестве первого аргумента execvp
:
execvp(arg[0],arg);
execvp
Функции execv (), execvp () и execvpe () предоставляют массив указателей на строки с нулевым символом в конце, которые представляют список аргументов, доступных для новой программы. Первый аргумент, по соглашению, должен указывать на имя файла, связанное с исполняемым файлом. Массив указателей должен заканчиваться указателем NULL. [ Акцент мой ]
Следовательно, для успешного вызова execvp
в качестве имени исполняемого файла в качестве имени исполняемого файла должен быть указан первый аргумент ./calc_prizes
.