यह हमेशा नहीं होता है। यह वह मूल्य है जिसे आपने ऑपरेशन सिस्टम द्वारा प्रोग्राम दिया था। उदाहरण के लिए एक कार्यक्रम exec
का उपयोग कर आप एक मनमाना मूल्य के लिए सेट कर सकते हैं कि प्रारंभ करने वाले:
int execve(const char *filename, char *const argv[],
char *const envp[]);
पहले पैरामीटर फाइल शुरू करने के लिए है, और argv इच्छा मुख्य लिए argv [0] और अन्य सभी पैरामीटर हैं। envp में पर्यावरण चर शामिल हैं (मानक सी या सी ++ द्वारा परिभाषित नहीं है। यह एक पॉज़िक्स चीज़ है)।
कार्यान्वयन मुख्य कार्य पूर्वनिर्धारित नहीं होगी:
दरअसल, इस C++ argv की परिभाषा है। यह फ़ंक्शन ओवरलोड नहीं किया जाएगा। यह में रिटर्न प्रकार प्रकार int है, लेकिन अन्यथा इसका प्रकार कार्यान्वयन-परिभाषित है। सभी कार्यान्वयन मुख्य की निम्नलिखित परिभाषा के दोनों के लिए अनुमति देने होंगे:
int main() { /* ... */ }
और
int main(int argc, char* argv[]) { /* ... */ }
बाद वाले मिलकर argc में करने के लिए पारित कर दिया तर्क की संख्या होगी में पर्यावरण से प्रोग्राम जो प्रोग्राम चलाया जाता है। अगर argc nonzero है, तो इन तर्कों को argv[0]
argv[argc-1]
में प्रदान किया जाएगा, जो शून्य-समाप्त मल्टीबाइट स्ट्रिंग्स (NTMBSs) (17.3.2.1.3.2) और argv[0]
के प्रारंभिक वर्णों के पॉइंटर्स के रूप में एनटीएमबीएस के प्रारंभिक चरित्र के सूचक होंगे जो प्रोग्राम को आमंत्रित करने के लिए इस्तेमाल किए गए नाम का प्रतिनिधित्व करता है। Argc का मान nonnegative होगा। argv[argc]
का मान 0 होगा। [नोट: यह अनुशंसा की जाती है कि argv के बाद कोई और (वैकल्पिक) पैरामीटर जोड़ा जाए। ]
यह कार्यान्वयन के लिए बहुत अधिक है जो "प्रोग्राम को आमंत्रित करने के लिए उपयोग किए जाने वाले नाम" को परिभाषित करता है। यदि आप अपने निष्पादन योग्य का पूरा पथ प्राप्त करना चाहते हैं, तो आप GetModuleFileName विंडोज पर और argv[0]
(निष्पादित करने के लिए उपयोग किए जाने वाले नाम को प्राप्त करने के लिए, रिश्तेदार हो सकते हैं) getcwd
(मौजूदा कार्य निर्देशिका प्राप्त करने के लिए, नाम बनाने की कोशिश कर रहे हैं) पूर्ण)।
स्रोत
2008-12-21 01:26:08
उदाहरण के लिए, एक खोल जानता है कि यह एक लॉगिन खोल है क्योंकि लॉगिन (1) एक डैश से शुरू करने के लिए argv [0] की व्यवस्था करता है। –
... और बैश जानता है कि यह argv [0] से "sh" की तुलना करके POSIX मोड में है :) आकस्मिक रूप से, यह argv चालबाजी व्यस्त बॉक्स को इतना छोटा बनाता है। सभी utils एक बाइनरी में एक साथ पैक कर रहे हैं जो सिर्फ विभिन्न argv [0] मान –
के साथ निष्पादित किया गया है मैं पोर्टेबल कार्यक्रमों में realpath से बचें। POSIX रीयलपाथ इंटरफ़ेस टूटा हुआ है, क्योंकि आप लक्ष्य बफर के आकार को निर्दिष्ट नहीं कर सकते हैं, न ही PATH_MAX के बारे में धारणा किए बिना पर्याप्त एक बड़ा आवंटित कर सकते हैं। – Doug