उपयोगकर्ता द्वारा इनपुट किए जाने वाले आकार के साथ सरणी बनाने के लिए कोई तरीका है (malloc
के अलावा)?क्या सी में एक चर लंबाई के साथ एक सरणी बनाने का कोई तरीका है?
उत्तर
एक तरीका वीएलए का उपयोग करना है (सी 99 परिभाषित करता है जिसे 'परिवर्तनीय लंबाई Arrays' कहा जाता है)।
#include <stdio.h>
int use_a_vla (int n)
{
int vla[n]; /* Array length is derived from function argument. */
vla[0] = 10;
vla[n-1] = 10;
return 0;
}
int main (void)
{
int i;
scanf ("%d", &i); /* User input. */
use_a_vla (i);
}
यह सब संकलक पर निर्भर करता है:
यहाँ एक उदाहरण है।
चर लंबाई स्वचालित सरणियों
ISO C99
में अनुमति दी जाती है, और एक विस्तार जीसीसी उन्हें C90 मोड में और सी में स्वीकार करता है के रूप में ++। ये arrays किसी अन्य स्वचालित सरणी की तरह घोषित किए जाते हैं, लेकिन लंबाई के साथ निरंतर अभिव्यक्ति नहीं है। भंडारण के बिंदु पर आवंटित किया जाता है जब ब्रेस-स्तर बाहर निकलता है और अस्वीकार कर दिया जाता है। उदाहरण के लिए:
FILE *
concat_fopen (char *s1, char *s2, char *mode)
{
char str[strlen (s1) + strlen (s2) + 1];
strcpy (str, s1);
strcat (str, s2);
return fopen (str, mode);
}
अधिक जानकारी के लिए this देखें।
अच्छा, यह पैडेंटिक है, लेकिन आप अपना खुद का ढेर प्रबंधन कोड लिख सकते हैं और अपनी स्मृति आवंटन समारोह को malloc() के अलावा कुछ और कॉल कर सकते हैं। मुझे उम्मीद है कि यह जवाब कष्टप्रद के बजाय मनोरंजक है।
आप Vlas या alloca()
की जरूरत नहीं है, तो यहां एक बेहद kludgy, लेकिन पोर्टेबल, ढेर आधारित तकनीक है:
int foo(int size)
{
if (size <= 64*1024)
{
unsigned char arr[64*1024];
return bar(arr, size);
}
else if (size <= 1*1024*1024)
{
unsigned char arr[1*1024*1024];
return bar(arr, size);
}
else if (size <= 64*1024*1024)
{
unsigned char arr[64*1024*1024];
return bar(arr, size);
}
else
return -1; // Assume it's too big
}
int bar(unsigned char arr[], int size)
{
...your code goes here...
}
int maincode(int size)
{
// Invoke bar() indirectly, allocating an array
// on the stack of at least 'size' bytes
return foo(size);
}
मैं विशेष रूप से इस तकनीक की सलाह नहीं देते, लेकिन यह आप अलग दे देंगे ढेर के बजाय ढेर पर आवंटित स्मृति के आकार के ब्लॉक।
मुझे लगता है कि आप malloc
से बचने की कोशिश कर रहे हैं क्योंकि आपको realloc
के बारे में पता नहीं है।
अनिवार्य रूप से, आपको मोटे तौर पर सी ++ वेक्टर क्या करने की कोशिश करनी चाहिए। एक बार आपकी सरणी एक निश्चित आकार में बढ़ जाती है, realloc
इसे आकार के दोगुनी हो जाती है।
realloc
यदि संभव हो तो आपकी मेमोरी ब्लॉक बढ़ेगी, और यदि संभव नहीं है तो यह malloc
एक नया होगा और सामग्री को कॉपी करेगा।
- 1. तुलना ऑपरेटर को एक चर बनाने का कोई तरीका है?
- 2. क्या सी में कार्य परमाणु बनाने का कोई तरीका है? ।
- 3. क्या TSQL चर स्थिर बनाने का कोई तरीका है?
- 4. क्या सी # में अनाम structs बनाने का कोई तरीका है?
- 5. क्या एचटीएमएल 5 के साथ एक बुलबुले में पूंछ बनाने का कोई तरीका है?
- 6. क्या एक चर के पार एक चर को बनाए रखने का कोई तरीका है?
- 7. चर लंबाई सरणी
- 8. क्या परीक्षण डेटा के साथ एक प्रकार का उदाहरण बनाने का कोई तरीका है?
- 9. सी # में एक आयताकार सरणी से एक-आयामी सरणी निकालने का सबसे अच्छा तरीका क्या है?
- 10. एक निश्चित लंबाई के लिए सरणी दोहराएं?
- 11. ज्ञात पैरामीटर प्रकारों के साथ एक चर लंबाई के साथ एक तर्क सूची दस्तावेज़ कैसे दस्तावेज़?
- 12. क्या रनटाइम-निर्धारित नाम के साथ कोई फ़ंक्शन बनाने का कोई गैर-eval तरीका है?
- 13. क्या जावा दुनिया में एक चर कुंजी की लंबाई के साथ एक नक्शा है?
- 14. सी में 0-लंबाई सरणी का महत्व क्या है?
- 15. एक चर लंबाई के माध्यम से आईरेटिंग जावा सरणी
- 16. क्या numpy के साथ matrices की एक सरणी कुशलतापूर्वक उलटा करने का कोई तरीका है?
- 17. क्या कोई कन्स्ट्रक्टर केवल सी # में अभिभावक वर्ग के लिए दृश्यमान बनाने का कोई तरीका है?
- 18. सी में एक चर/सूचक के प्रकार मुद्रित करने का कोई तरीका है?
- 19. गैर-निरंतर चर के साथ सरणी को प्रारंभ करने का कोई तरीका है? (C++)
- 20. इस लेआउट को बनाने का एक उचित तरीका क्या है?
- 21. क्या Emacs में "प्रोजेक्ट फ़ाइल" बनाने का कोई तरीका है?
- 22. क्या इस PHP को सरणी में डालने और इसे सरल बनाने का कोई तरीका है?
- 23. जावा में कोई तारीख बनाने का सही तरीका क्या है?
- 24. क्या PHPExcel में एक PHP सरणी सीधे एक पंक्ति में लिखने के लिए कोई तरीका है?
- 25. सी # में एक फ़ाइल में एक छोटा [] सरणी लिखने का सबसे अच्छा तरीका क्या है?
- 26. क्या यह एक पर्ल हैश बनाने का सही तरीका है जो सरणी का उपयोग करता है?
- 27. क्या कोई सेट बनाने का कोई त्वरित तरीका है?
- 28. सी ++ में एक चर क्या है?
- 29. क्या मॉडल के बिना फॉर्मेटस्टिक के साथ कोई फॉर्म बनाने का कोई तरीका है?
- 30. सिम्फनी में, क्या एक समय में पीडीएफ फाइल पेज बनाने का कोई तरीका है?
आपको एक ऐसे कंपाइलर की आवश्यकता है जो इसका समर्थन करता है और सही विकल्प सक्षम है। लेकिन ऐसा करने से पहले वीएलए की कमी के बारे में जागरूक रहें। – Mysticial
आप 'malloc()' का उपयोग क्यों नहीं करना चाहते हैं? –
मैं जानना चाहता हूं कि ऐसा करने का कोई वैकल्पिक तरीका है या नहीं। – rippy