2012-10-19 16 views
6

मैं निम्न त्रुटि जब इस कोड को चलाया जाता है मिलती है:मैं std :: basic_string प्रकार को चार प्रकार की सरणी में कैसे परिवर्तित कर सकता हूं?

syslog(LOG_ERR | LOG_USER, "%s",errorString); 

'{उर्फ स्थिरांक std :: basic_string} स्थिरांक स्ट्रिंग' परिवर्तित नहीं कर सकते करने के लिए> तर्क '2' के लिए '' स्थिरांक चार * ' शून्य syslog (पूर्णांक, स्थिरांक चार *, ...) 'inServer.cpp/PeCounter
लाइन 478 C/C++ समस्या

मैं इस कार्यक्रम और Errorstring मूल्य प्रिंट daemonizing हूँ ठीक उपयोग करते समय stdio करने के लिए outputted cout, लेकिन syslog कॉल का उपयोग करते समय यह प्रिंट नहीं करेगा।

'const char' के रूप में std :: basic_string (char) प्राप्त करने का कोई भी तरीका।

+1

अपना खुद का उत्तर सबमिट करना पूरी तरह से स्वीकार्य है। आपको इसे बाद में संपादित करने के साथ ही अपने प्रश्न में शामिल करने की आवश्यकता नहीं है। –

उत्तर

4

c_str() या data() सदस्य समारोह char_type की एक सरणी जो अपने स्ट्रिंग के पहले तत्व के लिए सूचक प्रदान करता है:

यहाँ और अधिक जानकारी के साथ एक साइट है। यह तब तक वैध है जब तक स्ट्रिंग ऑब्जेक्ट स्वयं वैध और अपरिवर्तित बनी हुई है (लेकिन सावधान रहें कि जो ऑपरेशन रीयलोकेशन का कारण हो सकता है वह पॉइंटर को अमान्य कर सकता है - इसे स्टोर करने के लिए सबसे अच्छा नहीं)।

+2

केवल 'c_str() 'स्ट्रिंग के अंत में टर्मिनेटर की गारंटी देता है। 'डेटा()' स्ट्रिंग की एक असीमित प्रति को इंगित कर सकता है, जो कि अधिकांश एपीआई के लिए खतरनाक है जो 'const char *' की अपेक्षा कर रहे हैं। –

+3

@AdrianMcCarthy: आप जिस सी ++ का उपयोग कर रहे हैं उसके संस्करण पर निर्भर करता है। सी ++ 11 'डेटा()' में नल-टर्मिनेटेड भी है (और खाली तारों पर भी वैध होने की गारंटी है)। तो सी ++ 11 में 'c_str() 'और' डेटा()' के बीच एकमात्र अंतर वास्तव में कॉन्स्टेस है। –

+0

@Matthieu एम .: आप सही हैं - मैं spec के पिछले संस्करण को देख रहा था। फिर भी, पुराने पुस्तकालयों का उपयोग करने वाले बहुत से लोग हैं, इसलिए भेद महत्वपूर्ण हो सकता है। इसके अलावा 'c_str() 'इरादे का थोड़ा अधिक सुझाव देने वाला है। –

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

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