int main();
Это простая декларация.Он не может принимать аргументы командной строки.
int main(int argc, char* argv[]);
Это объявление используется, когда ваша программа должна принимать аргументы командной строки.При запуске следующим образом:
myprogram arg1 arg2 arg3
argc
или Счетчик аргументов будут установлены в 4 (четыре аргумента), а argv
, или Векторы аргументов, будут заполнены строковыми указателями на «myprogram"," arg1 "," arg2 "и" arg3 ". Вызов программы (myprogram
) включен в аргументы!
В качестве альтернативы вы можете использовать:
int main(int argc, char** argv);
Это также верно.
Можно добавить еще один параметр:
int main (int argc, char *argv[], char *envp[])
Параметр envp
также содержит переменные среды.Каждая запись имеет следующий формат:
VARIABLENAME=VariableValue
примерно так:
SHELL=/bin/bash
Список переменных среды заканчивается нулем.
ВАЖНО: НЕ используйте значения argv
или envp
непосредственно в вызовах system()
!Это огромная дыра в безопасности , поскольку злоумышленники могут задавать переменные среды для команд командной строки и (потенциально) наносить огромный ущерб.В общем, просто не используйте system()
.Почти всегда есть лучшее решение, реализованное с помощью библиотек C.