अभी मैं अपने सी प्रोग्राम में libunistring का उपयोग करने की कोशिश कर रहा हूँ। मुझे यूटीएफ -8 स्ट्रिंग को संसाधित करना है, और इसके लिए मैंने libunistring लाइब्रेरी से u8_strlen() फ़ंक्शन का उपयोग किया है।
कोड उदाहरण:libunistring u8_strlen() strlen() के बराबर है?
void print_length(uint8_t *msg) {
printf("Default strlen: %d\n", strlen((char *)msg));
printf("U8 strlen: %d\n", u8_strlen(msg));
}
जरा कल्पना है कि हम फोन print_length()
msg = "привет"
साथ (सिरिलिक, UTF-8 एन्कोडिंग)। मुझे उम्मीद है कि strlen()
12 (6 अक्षर * 2 बाइट प्रति अक्षर), और u8_strlen()
वापस 6 (केवल 6 अक्षरों) लौटाएगा।
लेकिन मैं प्राप्त उत्सुक परिणाम:
Default strlen: 12
U8 strlen: 12
इस के बाद मैं देखने के लिए u8_strlen प्राप्ति की कोशिश की कर रहा हूँ, और इस कोड मिला:,
size_t
u8_strlen (const uint8_t *s)
{
return strlen ((const char *) s);
}
मैं सोच रहा हूँ है यह बग या यह सही जवाब है? यदि यह सही है, क्यों?