2014-07-15 2 views
5

लिनक्स पर, Argv सरणी के तत्व हमेशा स्मृति में संगत स्थिति पर कब्जा करते हैं, यानी argv [n + 1] का पहला अक्षर n = 0 के लिए argv [n] के समाप्त नल बाइट का पालन करता है ... (argc -1)।क्या argv सरणी के तत्व हमेशा स्मृति में संगत होते हैं?

क्या यह सभी पॉज़िक्स सिस्टम/सभी सी कार्यान्वयन पर मामला होने की गारंटी है?

+0

अपने कमांड लाइन तर्कों के बीच अतिरिक्त रिक्त स्थान डालने का प्रयास करें और फिर से जांचें। – user3386109

+2

@ user3386109: मुझे गंभीरता से संदेह है कि इससे कोई फर्क पड़ता है। यह संभावना है कि * दिए गए कार्यान्वयन के लिए * तर्क तारों को आवंटित किया जाएगा, लेकिन इसकी कोई गारंटी नहीं है (और कोई अच्छा कारण नहीं है कि मैं इस पर निर्भर रहने के बारे में सोच सकता हूं)। –

+0

@ किथ थॉम्पसन एक संभावित कार्यान्वयन जगह पर कमांड लाइन को तोड़ने के लिए 'स्ट्रोकोक' का उपयोग करना है। कमांड लाइन अतिरिक्त रिक्त स्थान से शुरू होने पर तर्क स्ट्रिंग तब गैर-संगत होगी। लेकिन परवाह किए बिना, मैं मानता हूं कि कोई गारंटी नहीं है, और तारों पर निर्भर रहने पर कोई अच्छा कारण नहीं है। – user3386109

उत्तर

7

यह गारंटी नहीं है। सी द्वारा न तो, न तो POSIX द्वारा।

+0

क्या यह कार्यान्वयन द्वारा गारंटी नहीं है कि एक सरणी स्मृति का एक आकस्मिक ब्लॉक है? यदि ऐसा है, तो यह अपवाद क्यों होना चाहिए? –

+8

@ मोनजवास्थी 'argv' 'char' पॉइंटर्स की एक सरणी है, यानी,' char * argv [N]'। स्ट्रिंग पॉइंटर्स को स्मृति में संगत होने की गारंटी दी जाती है, न कि स्ट्रिंग्स। – ouah

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