दिलचस्प पोस्ट
SQL सर्वर में तालिका से कॉलम नाम कैसे प्राप्त कर सकते हैं? JSON डेटा के साथ पोस्ट के माध्यम से फ़ाइल डाउनलोड करने के लिए जावास्क्रिप्ट / jQuery एएसपी.नेट एमवीसी में एचटीएमएल -5 डेटा- एट्रिब्यूट्स में डैश कैसे उपयोग करें I jquery – क्लिक करें घटना गतिशील बनाया बटन के लिए काम नहीं कर रहा है JTextField में केवल अंकों की शुरुआत करने की अनुमति देने के लिए कैसे? वेबस्कॉट क्लाइंट API में HTTP शीर्षलेख रिटर्न स्टेटमेंट बनाम निकास () में मुख्य () नोड.जेएस कोड में कहीं भी MongoDB कनेक्शन बंद क्यों नहीं करना है? पायथन में repr () फ़ंक्शन को समझना NSArray को उद्देश्य-सी में एक नए NSArray में फ़िल्टर करना मैं यूनिक्स कमांड लाइन पर या किसी शेल स्क्रिप्ट में पाठ फ़ाइल की लाइनों को कैसे फेर सकती हूँ? आप रिमोट गीट शाखा कैसे बनाते हैं? java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener मेरी प्रोग्राम दुर्घटना क्यों नहीं है जब मैं एक सरणी के अंत में लिखता हूं? OpenCV के साथ समानता के लिए छवियों की जांच करना

एक स्ट्रेट में अनसाइज्ड सरणी घोषणा

सी क्यों यह अनुमति देता है:

 typedef struct एस
 {
   इंट एआर [];
 } s;

जहां सरणी arr का कोई आकार निर्दिष्ट नहीं है?

वेब के समाधान से एकत्रित समाधान "एक स्ट्रेट में अनसाइज्ड सरणी घोषणा"

यह सीएमटी सुविधा है जिसे लचीला एरेज़ कहा जाता है , मुख्य विशेषता संरचना और आर के अंदर सुविधाओं की तरह चर लंबाई सरणी की अनुमति देने के लिए है .. लचीली सरणी के सदस्यों के दूसरे प्रश्न के उत्तर में संकेतों पर लचीला सरणियों का उपयोग करने के लिए लाभ की एक सूची प्रदान करता है। अनुभाग 6.7.2.1 संरचना और संघ विनिर्देशक पैरा 16 में ड्राफ्ट C99 मानक कहते हैं:

एक विशेष मामले के रूप में, एक से अधिक नामित सदस्य के साथ एक संरचना का अंतिम तत्व एक अधूरा एआरए प्रकार हो सकता है; इसे एक लचीला सरणी सदस्य कहा जाता है ज्यादातर स्थितियों में, लचीला सरणी सदस्य को नजरअंदाज किया जाता है। विशेष रूप से, संरचना का आकार जैसे कि लचीला सरणी सदस्य को छोड़ दिया गया था, सिवाय इसके कि इसमें चूक से अधिक अनुगामी पैडिंग हो सकती है। […]

इसलिए यदि आपके पास s* आप संरचना के लिए जरूरी जगह के अलावा सरणी के लिए स्थान आवंटित करेंगे, आमतौर पर आपके पास संरचना में अन्य सदस्य होंगे:

 s *s1 = malloc( sizeof(struct s) + n*sizeof(int) ) ; 

मसौदा मानक वास्तव में पैरा 17 में एक शिक्षाप्रद उदाहरण है:

 EXAMPLE After the declaration: struct s { int n; double d[]; }; the structure struct s has a flexible array member d. A typical way to use this is: int m = /* some value */; struct s *p = malloc(sizeof (struct s) + sizeof (double [m])); and assuming that the call to malloc succeeds, the object pointed to by p behaves, for most purposes, as if p had been declared as: struct { int n; double d[m]; } *p; (there are circumstances in which this equivalence is broken; in particular, the offsets of member d might not be the same). 

आप शायद सी 99 में लचीला एरेज़ की तलाश कर रहे हैं फ्लेक्सिबल सरणी सदस्य एक स्ट्रेट / यूनियन के अंत में अज्ञात आकार के सदस्य होते हैं।

एक विशेष मामले के रूप में, एक से अधिक नामित सदस्य के साथ एक संरचना का अंतिम तत्व एक अधूरा एआरए प्रकार हो सकता है; इसे एक लचीला सरणी सदस्य कहा जाता है ज्यादातर स्थितियों में, लचीला सरणी सदस्य को नजरअंदाज किया जाता है। विशेष रूप से, संरचना का आकार जैसे कि लचीला सरणी सदस्य को छोड़ दिया गया था, सिवाय इसके कि इसमें चूक से अधिक अनुगामी पैडिंग हो सकती है।

आप पहली जगह में संरचना हैक के कारण भी देख सकते हैं।

यह स्पष्ट नहीं है कि यह कानूनी या पोर्टेबल है, लेकिन यह बल्कि लोकप्रिय है तकनीक का एक कार्यान्वयन इस तरह कुछ दिखाई दे सकता है:

  #include <stdlib.h> #include <string.h> struct name *makename(char *newname) { struct name *ret = malloc(sizeof(struct name)-1 + strlen(newname)+1); /* -1 for initial [1]; +1 for \0 */ if(ret != NULL) { ret->namelen = strlen(newname); strcpy(ret->namestr, newname); } return ret; } 

यह फ़ंक्शन नाम संरचना का एक उदाहरण आवंटित करता है ताकि आकार समायोजित किया जा सके ताकि नामित क्षेत्र अनुरोधित नाम रख सकता है (न सिर्फ एक अक्षर, जैसा कि संरचना घोषणा का सुझाव होगा)।

इसकी लोकप्रियता के बावजूद, यह तकनीक कुछ हद तक कुख्यात भी है- डेनिस रिची ने इसे "सी कार्यान्वयन के साथ अनुचित चैमिलीन" कहा है। एक आधिकारिक व्याख्या मानी जाती है कि यह सी स्टैंडर्ड के साथ कड़ाई से अनुरूप नहीं है, हालांकि यह सभी ज्ञात कार्यान्वयन के तहत काम करने के लिए प्रतीत होता है। कम्पाइलर जो सरणी सीमा की जांच करते हैं, सावधानियां जारी कर सकती हैं।