मैं एक सामान्य फ़ंक्शन लिखने की कोशिश कर रहा हूं जो विभिन्न डेटा प्रकारों के तर्कों को vector<char>
में रखता है और संग्रहीत करता है। कास्टिंग से मेरा मतलब है कि पात्रों के वेक्टर के भीतर बिट प्रतिनिधित्व संरक्षित है। उदाहरण के लिए एक 4 बाइट int
जैसे 0x19a4f607
को वेक्टर में vc[0] = 0x19
, vc[1] = 0xa4
, vc[2] = 0xf6
और vc[3] = 0x07
के रूप में स्टोर किया जाएगा।
मैंने अब तक जो लिखा है वह यहां है, लेकिन मुझे सेगमेंटेशन गलती मिलती है। कुछ अनुमान है इसे कैसे ठीक किया जा सकता है?
template <class T>
void push_T(vector<char>& vc, T n){
char* cp = (char*)&n;
copy(cp, cp+sizeof(T), vc.end());
}
2 जवाब
आपको एक पुनरावर्तक की आवश्यकता है जो वेक्टर के अंत में डालने में सक्षम हो; .begin()
और .end()
केवल मौजूदा तत्वों को संशोधित करने में सक्षम हैं। std::back_inserter(vc)
आजमाएं।
यहां तत्काल समस्या यह है कि आपने अपने वेक्टर का आकार बदलने का कोई प्रयास नहीं किया है, इसलिए आप तुरंत अंतर्निहित सरणी के अंत को लिख देते हैं। आपको copy()
कॉल से पहले vc.resize(vc.size() + sizeof(T))
, या एक std::back_inserter
इंसर्ट इटरेटर का उपयोग करना होगा ताकि कॉपी पर push_back() व्यवहार को लागू किया जा सके।
अब, मैं मान लूंगा कि आपके पास टाइप सिस्टम को पहली बार में बदलने का एक अच्छा कारण है ....
संबंधित सवाल
नए सवाल
c++
C ++ एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा है। यह मूल रूप से C के विस्तार के रूप में डिज़ाइन किया गया था और इसमें एक समान सिंटैक्स है, लेकिन यह अब पूरी तरह से अलग भाषा है। C ++ कंपाइलर के साथ संकलित कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। विशिष्ट मानक संशोधन [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] या [C ++ 23], आदि से संबंधित प्रश्नों के लिए संस्करण-विशिष्ट टैग का उपयोग करें। ।