Как принимать argv, начиная с определенного индекса

#c

#c

Вопрос:

Я хочу передать argv в execvp, но начиная с определенного индекса i, отличного от 0. Как мне это сделать? Я думал скопировать аргументы, начинающиеся с i, в другой массив и использовать этот массив, но количество аргументов не является фиксированным и не похоже, что это возможно без динамического распределения, в котором я новичок. Я думаю, что есть более простой способ просто указать argv на i, но я не могу понять это.

 execvp(command, argv); //need argv to start at index 3
  

Ответ №1:

Поскольку argv — это массив, вы можете просто написать amp;argv[1] , например, для передачи второго аргумента и далее.

Итак, для вашего случая: execvp(command, amp;argv[3]); , просто убедитесь, что argc больше 3.

Комментарии:

1. Я думаю, что этот подход может быть немного хрупким. Причина в том, что execvp() будет ожидать получения argv массива, для которого argv[0] является именем программы. Это может иметь место в вашем примере, но я не уверен, что это можно гарантировать. argv Динамическое выделение нового не сложно, и в нем используются методы, которые трудно освоить, не зная C.