int main();
Đây là một tuyên bố đơn giản. Nó không thể lấy bất kỳ đối số dòng lệnh.
int main(int argc, char* argv[]);
Tuyên bố này được sử dụng khi chương trình của bạn phải lấy các đối số dòng lệnh. Khi chạy như vậy:
myprogram arg1 arg2 arg3
argc
, hoặc Số lượng đối số, sẽ được đặt thành 4 (bốn đối số) và argv
, hoặc Đối số vectơ, sẽ được điền với các con trỏ chuỗi thành "myprogram", "arg1", "arg2" và "arg3". Lệnh gọi chương trình ( myprogram
) được bao gồm trong các đối số!
Ngoài ra, bạn có thể sử dụng:
int main(int argc, char** argv);
Điều này cũng hợp lệ.
Có một tham số khác bạn có thể thêm:
int main (int argc, char *argv[], char *envp[])
Các envp
thông số còn chứa các biến môi trường. Mỗi mục theo định dạng này:
VARIABLENAME=VariableValue
như thế này:
SHELL=/bin/bash
Danh sách các biến môi trường được kết thúc bằng null.
QUAN TRỌNG: KHÔNG sử dụng bất kỳ argv
hoặc envp
giá trị trực tiếp trong các cuộc gọi đến system()
! Đây là một lỗ hổng bảo mật rất lớn vì người dùng độc hại có thể đặt các biến môi trường thành các lệnh dòng lệnh và (có khả năng) gây ra thiệt hại lớn. Nói chung, không sử dụng system()
. Hầu như luôn luôn có một giải pháp tốt hơn được thực hiện thông qua các thư viện C.