2013-07-19 10 views
21

मैं प्रकार कास्टिंग में थोड़ा खराब हूं। मेरे पास xmlChar* (जो हस्ताक्षरित char * है) में एक स्ट्रिंग है, मैं इस हस्ताक्षरित चार को std::string प्रकार में परिवर्तित करना चाहता हूं।बिना हस्ताक्षर किए गए char * से स्ट्रिंग

xmlChar* name = "Some data"; 

मैंने कास्ट टाइप करने के लिए अपनी पूरी कोशिश की, लेकिन मैं इसे बदलने का कोई तरीका नहीं बना सका।

+1

'स्ट्रिंग या' std :: स्ट्रिंग'? 'स्ट्रिंग' क्या है, यदि आपका मतलब 'std :: string' नहीं है? –

+0

क्षमा @Mats पीटरसन, BTW अपने std :: स्ट्रिंग – Cyril

+0

उपयोग reinterpret_cast इस [देखें http://stackoverflow.com/questions/658913/c-style-cast-from-unsigned-char-to-const- चार] [1] [1]: http://stackoverflow.com/questions/658913/c-style-cast-from-unsigned-char-to-const-char – Ani

उत्तर

36
std::string sName(reinterpret_cast<char*>(name)); 

reinterpret_cast<char*>(name) सुरक्षित तरीका नहीं में char* करने के लिए unsigned char* से डाले लेकिन वह एक है जो यहाँ इस्तेमाल किया जाना चाहिए है। फिर आप std::string के साधारण कन्स्ट्रक्टर को कॉल करते हैं।

तुम भी कर सकता है यह सी-शैली (अनुशंसित नहीं):

std::string sName((char*) name); 
+0

मुझे पता चला है कि कुछ मामलों में, पुन: परिभाषित कलाकार अंत में कुछ जंक वर्ण उत्पन्न करता है। बहुत गहराई से जांच नहीं की थी क्योंकि उन्हें छेड़छाड़ करना आसान था, लेकिन मैंने सोचा कि अगर मैं अकेला नहीं हूं तो मैं इसका उल्लेख करूंगा। – MatrixManAtYrService

+0

अकेले नहीं, मेरे साथ भी हुआ – audiFanatic

+0

आप शायद जंक देख रहे हैं क्योंकि आपका हस्ताक्षरित चार सरणी शून्य टर्मिनेटर के साथ समाप्त नहीं होता है (या ऐसा लगता है जहां आप ऐसा सोचते हैं)। आम तौर पर, एनयूएल पर विचार किए बिना एक प्रकार से एक स्ट्रिंग प्रकार में कास्टिंग खतरनाक होता है और आपको इस बारे में सोचना चाहिए यदि आपका कोड ओपी के उदाहरण से अलग है (स्ट्रिंग ** अक्षर ** पहले से ही शून्य टर्मिनेटर हैं) –

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