const(char)*
का उपयोग न करें?
डी में
string bar = "Hello ";
string foo = "world!";
bar ~= foo;
स्ट्रिंग शाब्दिक प्रकार string
के हैं, क्या तुमने कभी एक const(char)*
उपयोग करने के लिए, जब सी कोड के साथ इंटरफ़ेस को छोड़कर की जरूरत नहीं होनी चाहिए।
कारण डी क्योंकि const(char)*
एक स्ट्रिंग, नहीं है शब्द का कोई अर्थ में कि संयोजन है अनुमति नहीं है। डी में स्ट्रिंग्स immutable(char)[]
(जो alias
'डी string
द्वारा हैं)। एक const(char)*
एक निरंतर चरित्र के लिए सिर्फ एक सूचक है। सी और सी ++ के विपरीत, कोई अंतर्निहित शून्य टर्मिनेटर नहीं है, इसलिए डी यह नहीं मान सकता कि वह एक है।
string bar = "Hello ";
const(char)* foo = "world!";
bar ~= foo[0..strlen(foo)];
:
तो जो भी कारण आप पूरी तरह एक const(char)*
का उपयोग करना चाहिए और आप जानते हैं कि यह अशक्त समाप्त होता है के लिए है, तो आप टुकड़ा करने की क्रिया है, जो आप तो एक string
को संलग्न कर सकते हैं द्वारा एक const(char)[]
इसे से बाहर कर सकते हैं
स्रोत
2012-08-11 12:21:37
स्लाइसिंग 'foo' आपको' स्ट्रिंग 'नहीं देता है, लेकिन 'const (char) []'। यह अभी भी 'स्ट्रिंग बार' के साथ संयोजन के लिए संगत है, लेकिन यदि आप 'string' चर में 'foo' slicing के परिणाम को संग्रहीत करने का प्रयास करते हैं तो आपको एक त्रुटि मिलेगी। –
@jA_cOp: अच्छी तरह से देखा गया, मैं इसे ठीक कर दूंगा। –
स्ट्रिंग तब स्मृति में शून्य-समाप्त हो गई है, या मुझे बार ~ = foo [0..strlen (foo) +1 लिखना चाहिए; सी इंटरऑप के लिए अंतिम पंक्ति में? –