2017-07-24 13 views
9

बढ़ाएं मेरे पास बहुत सारे स्ट्रिंग अक्षर हैं जो 65535 बाइट से बड़े हैं। मुझे इन तारों को अलग फ़ाइलों में सहेजने की अनुमति नहीं है, मैं स्ट्रिंग सीमा के साथ कैसे काम कर सकता हूं?स्ट्रिंग शाब्दिक लंबाई सीमा

https://stackoverflow.com/a/11488682/7821462

  • MSVC: 2048

  • जीसीसी: नहीं सीमा (100,000 के लिए वर्ण), लेकिन देता है 510 पात्रों के बाद चेतावनी:

    String literal of length 100000 exceeds maximum length 509 that 
    C90 compilers are required to support 
    
+0

एक विकल्प तारों को एकल फ़ाइल के अंदर अलग-अलग चरों में विभाजित करना है और फिर इन चरों पर पॉइंटर्स की सरणी का उपयोग करना है। यह आपके जीवन को कठिन बनाता है लेकिन यह प्रकृति – tilz0R

+0

किस कंपाइलर के लिए है? जीसीसी, एमएसवीसी या दोनों? – Rakete1111

+0

* ग्रंथों को संग्रहीत करने के लिए आप फ़ाइलों (या कुछ अन्य डेटाबेस) का उपयोग क्यों नहीं कर सकते? आपके पास क्या आवश्यकता है जो इसकी अनुमति नहीं देती है? –

उत्तर

-3

Microsoft documentation का कहना है कि concatenation का उपयोग (यानी, "a" "b" "c""abc" के बजाय) आपको 64 केबी बाइट्स तक सीमा बढ़ाने की अनुमति देता है। लेकिन यह आपके उपयोग के मामले के लिए पर्याप्त नहीं है।

यदि नहीं, तो आप शायद अलग से स्ट्रिंग को बचा सकता है, इसे का उपयोग xxd -i (xxd comes with [vim](http://www.vim.org/)), and # कि include` एक बाइट सरणी प्रारंभकर्ता में कन्वर्ट (लेकिन आप अशक्त टर्मिनेटर मैन्युअल रूप से जोड़ने के लिए) होगा।

+0

एन्कोड करें मैंने लिखा है कि स्ट्रिंग अक्षर 65535 बाइट्स से बड़े हैं, मैं सरणी प्रारंभकर्ता तकनीक पर एक नज़र डालूंगा। – MiP

0

उपयोग करने का प्रयास एक सरणी।

https://msdn.microsoft.com/en-us/library/81k8cwsz.aspx

एक सरणी के लिए अधिकतम आकार size_t द्वारा परिभाषित किया गया है। हेडर फाइल STDDEF.H में परिभाषित किया जाता है, size_t रेंज 0x00000000 0x7CFFFFFF के साथ एक अहस्ताक्षरित int है।

0

आप पाठ स्ट्रिंग को कई तारों में विभाजित कर सकते हैं। निम्नलिखित कोड विजुअल स्टूडियो 2017 पर काम किया:

const char* p1 = "1234567890..."; // Very long (length > 65000) 
const char* p2 = "abcdefghij..."; // Very long (length > 65000) 
string s = p1; 
s += p2; 
cout << s.size() << endl; 

आप एक से अधिक लाइनों में पाठ स्ट्रिंग लिखने की तरह है:

const char* p = "This is a " 
    "very long string..."; 

असल में विजुअल C++ में अधिकतम सीमा 65535 है यहाँ संकलक त्रुटि संदेश है :

गंभीर त्रुटि C1091: कंपाइलर सीमा: स्ट्रिंग लंबाई में 65535 बाइट्स से अधिक

1

ये lar जीई स्ट्रिंग्स कोड से संसाधनों की तरह अधिक प्रतीत होते हैं, और मैं एक ही डेटा को लिनक्स में डालने के लिए विंडोज बाइनरी (FindResource/LoadResource) के संसाधन खंड और SO: embedding resources into linux executable के उत्तर का उपयोग करूंगा।

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