लोकप्रिय सॉफ्टवेयर डेवलपर्स और कंपनियों (Joel Spolsky, Fog Creek software) का सही उपयोग जब सी या सी ++ कोड लिखने यूनिकोड वर्ण भंडारण के लिए wchar_t इस्तेमाल करते हैं। अच्छी कोडिंग प्रथाओं के संबंध में char और wchar_t का उपयोग कब और कैसे किया जाना चाहिए?सी में स्ट्रिंग भंडारण और सी ++
मुझे विशेष रूप से POSIX अनुकरण में यूनिकोड का लाभ उठाने वाले सॉफ़्टवेयर लिखने में अनुपालन है।
जब wchar_t का उपयोग कर, आप पात्रों विस्तृत वर्णों की एक सरणी में एक प्रति-चरित्र या प्रति-सरणी तत्व के आधार पर देख सकते हैं:
/* C code fragment */
const wchar_t *overlord = L"ov€rlord";
if (overlord[2] == L'€')
wprintf(L"Character comparison on a per-character basis.\n");
आप यूनिकोड बाइट्स की तुलना कैसे कर सकते हैं (या अक्षर) char का उपयोग करते समय?
अब तक सी में तार और प्रकार चार के पात्रों की तुलना में मेरी पसंदीदा तरीका अक्सर इस तरह दिखता है:
/* C code fragment */
const char *mail[] = { "ov€[email protected]", "ov€[email protected]" };
if (mail[0][2] == mail[1][2] && mail[0][3] == mail[1][3] && mail[0][3] == mail[1][3])
printf("%s\n%zu", *mail, strlen(*mail));
एक यूनिकोड वर्ण के बाइट समकक्ष के लिए इस विधि स्कैन। यूनिकोड यूरो प्रतीक € 3 बाइट लेता है। इसलिए यूनिकोड वर्ण मिलान होने पर यह जानने के लिए कि किसी को तीन चार सरणी बाइट्स की तुलना करने की आवश्यकता है। अक्सर आपको उस चरित्र या स्ट्रिंग के आकार को जानने की आवश्यकता होती है जिसे आप तुलना करना चाहते हैं और बिट्स जो काम के समाधान के लिए उत्पन्न करता है। यह यूनिकोड को संभालने का एक अच्छा तरीका नहीं दिखता है। क्या char के तारों और चरित्र तत्वों की तुलना करने का कोई बेहतर तरीका है?
इसके अलावा, wchar_t का उपयोग करते समय, आप फ़ाइल सामग्री को सरणी में कैसे स्कैन कर सकते हैं? फ़ंक्शन फ़्रेड मान्य परिणाम उत्पन्न नहीं करता प्रतीत होता है।
सी ++ में यूनिकोड: 'wchar_t' का उपयोग न करें, उचित यूनिकोड लाइब्रेरी का उपयोग करें। –
'यूनिकोड वर्ण एन्कोडिंग के लिए wchar_t का उपयोग करते हैं। नहीं; वे यूनिकोड चरित्र _storage_ के लिए इसका उपयोग करते हैं, और इसमें एक बड़ा अंतर है। –
[एसडीडी :: wstring वीएस std :: स्ट्रिंग] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/402283/stdwstring-vs-stdstring) –