2013-05-07 6 views
9

के बराबर है, मैंने एक लेख पढ़ा है (यूआरएल भूल गया), जिसमें कहा गया है कि argv[argc]NULL पॉइंटर है (\0 है)। यह जांचने के लिए कि क्या यह सच है कि मैंने यह कोड लिखा है, हाँ यह अस्तित्व में है। जो मुझे समझ में नहीं आता है, ओएस में NULL पॉइंटर argv[argc] पर क्यों शामिल है। क्या यह किसी और चीज के लिए भी उपयोगी है?क्या argv [argc] नल पॉइंटर

int 
main (int argc, char **argv){ 

    while (*argv) 
     printf ("%s\n", *argv++); 

    return 0; 
} 
+0

"* argv [0] एनटीएमबीएस के शुरुआती चरित्र के लिए सूचक होगा जो प्रोग्राम को आमंत्रित करने के लिए इस्तेमाल किए गए नाम का प्रतिनिधित्व करता है या" "। Argc का मान nonnegative होगा। Argv [argc] का मान होगा 0. * " – Maroun

उत्तर

9

सी स्टैंडर्ड 5.1.2.2.1/2 सेकंड के बाद स्पष्ट रूप से कहते हैं

argv [argc] एक अशक्त सूचक होगा।

सी ++ स्टैंडर्ड 3.6.1/2 भी स्पष्ट रूप से

कहते argv का मूल्य [argc] 0.

+0

हां, लेकिन इसके लिए प्रेरणा क्या है? – Thilo

+0

आकाश नीला क्यों है? यह 'char' के शून्य समाप्ति वाले सरणी की एक शून्य समाप्ति सरणी है। मैं स्थिरता का अनुमान लगाऊंगा और ओपी जैसे कोड को सुविधाजनक बनाने के लिए। – rubenvb

+0

देखें, आप इसे कर सकते हैं। :-) मेरे लिए एक अच्छा जवाब की तरह लगता है। – Thilo

5

मानक (C99 5.1.2.2.1p2) जनादेश कि होगी:

यदि उन्हें घोषित किया जाता है, तो मुख्य कार्य के पैरामीटर निम्नलिखित बाधाओं का पालन करेंगे:

- argc का मान nonnegative होगा।

- argv [argc] एक शून्य सूचक होगा।

...

इस के लिए तर्क तर्क सूची के अंत के लिए एक अनावश्यक जांच प्रदान करने के लिए, आम बात के आधार पर है (संदर्भ: एएनएसआई सी प्रोग्रामिंग भाषा के लिए दलील (1990), 2.1.2.2)।

संबंधित मुद्दे