2012-05-16 2 views
4

Функция execv() ожидает массив завершенных строк NULL, но не принимает количество аргументов. Он использует контрольное значение (NULL указатель), чтобы определить, когда заканчивается массив.Могу ли я передать argv от main к execv?

Человек страница execv() государств ...

Первый аргумент, по соглашению, должен указать на имя , связанный с файлом, который выполняется. Массив указателей должен быть прерван указателем NULL.

... поэтому мой вопрос ....

Я хочу передать argv от main() к execv().

Могу ли я быть уверенным, что argv, который входит в main, заканчивается указателем NULL? То есть, могу ли я быть уверенным, что argv[argc] == NULL или мне нужно выделить собственный массив char* размера argc + 1 и положил NULL в индекс argc?

Если я могу быть уверен, это где-то документировано?

Спасибо, ~ Эрик

ответ

7

Да. Вектор argv всегда NULL завершено.

В проекте стандарта C99 гласит:

Если они объявлены, что параметры функции main должны соблюдать следующие ограничения:

  • Значение argc должно быть неотрицательным.
  • argv[argc] должен быть нулевым указателем.
+3

Можете ли вы привести источник этого? –

+5

@ ErnestFriedman-Hill Из стандарта, раздел 5.1.2.2.1 (см., Например, http://c0x.coding-guidelines.com/5.1.2.2.1.html) –

+0

Отлично, спасибо! –